@riverbankcms/sdk 0.107.0 → 0.108.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 (159) hide show
  1. package/dist/{PreviewEditorSidebar-DpAbAl08.mjs → PreviewEditorSidebar-BBT-kZAM.mjs} +46 -11
  2. package/dist/{PreviewEditorUI-O7cn6Xxv.mjs → PreviewEditorUI-D69xNKT2.mjs} +10 -9
  3. package/dist/{PreviewQueryProvider-D0tnKl0t.mjs → PreviewQueryProvider-RRu7wyQ5.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-CVB7urtl.mjs → SdkPreviewModeRuntime-CuDjXH6o.mjs} +426 -72
  5. package/dist/{SiteChromeCustomizeContext-C_sizso-.mjs → SiteChromeCustomizeContext-BQUY2dEk.mjs} +3865 -544
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +3712 -220
  7. package/dist/_dts/api/src/blocks.d.ts +41 -7
  8. package/dist/_dts/api/src/bookingRecords.d.ts +180 -115
  9. package/dist/_dts/api/src/cache-tags.d.ts +3 -0
  10. package/dist/_dts/api/src/contentRuntime.d.ts +19 -1
  11. package/dist/_dts/api/src/endpoints.d.ts +99 -0
  12. package/dist/_dts/api/src/footer-settings.d.ts +1 -0
  13. package/dist/_dts/api/src/footerSettings.d.ts +8 -0
  14. package/dist/_dts/api/src/index.d.ts +5 -2
  15. package/dist/_dts/api/src/navigation/contracts.d.ts +3 -3
  16. package/dist/_dts/api/src/previewContentContract.d.ts +4 -0
  17. package/dist/_dts/api/src/sdkContracts.d.ts +62 -0
  18. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  19. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +143 -55
  20. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -1
  21. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +41 -1
  22. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +0 -1
  23. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +50 -0
  25. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +9 -48
  26. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -1
  28. package/dist/_dts/blocks/src/system/icons/social.d.ts +5 -0
  29. package/dist/_dts/blocks/src/system/icons/svg.d.ts +1 -0
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +2 -2
  31. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +13 -0
  32. package/dist/_dts/blocks/src/system/node/fragments/footerNav.d.ts +2 -0
  33. package/dist/_dts/blocks/src/system/node/fragments/styledContainer.d.ts +4 -4
  34. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +3 -12
  35. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/types/link.d.ts +3 -3
  38. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +14 -0
  39. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +27 -8
  40. package/dist/_dts/content-editor/src/footerComposer.d.ts +56 -0
  41. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +1 -1
  42. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +5 -5
  43. package/dist/_dts/content-editor/src/index.d.ts +2 -0
  44. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +3 -1
  45. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +20 -36
  46. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +5 -1
  47. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +11 -0
  48. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  49. package/dist/_dts/content-model/src/definitions/shared.d.ts +3 -0
  50. package/dist/_dts/core/src/branded.d.ts +3 -0
  51. package/dist/_dts/core/src/editor-state.d.ts +4 -0
  52. package/dist/_dts/core/src/footer-composition.d.ts +143 -0
  53. package/dist/_dts/core/src/index.d.ts +2 -0
  54. package/dist/_dts/core/src/public-profile.d.ts +73 -0
  55. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3043 -2941
  56. package/dist/_dts/db/src/schemas/forms.d.ts +10 -10
  57. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +5 -0
  58. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +1 -0
  59. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -1
  60. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +2 -1
  61. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +2 -1
  62. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +10 -0
  63. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +1 -0
  64. package/dist/_dts/path-utils/src/index.d.ts +5 -0
  65. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +5 -0
  66. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  67. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  68. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  69. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  70. package/dist/_dts/preview-next/src/client/preview/previewErrorMessages.d.ts +4 -0
  71. package/dist/_dts/sdk/src/cli/content/reader.d.ts +1 -0
  72. package/dist/_dts/sdk/src/client/management/blocks.d.ts +14 -1
  73. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -0
  74. package/dist/_dts/sdk/src/client/management/types.d.ts +15 -1
  75. package/dist/_dts/sdk/src/config/content-types.d.ts +2 -0
  76. package/dist/_dts/sdk/src/config/content-validation.d.ts +4 -0
  77. package/dist/_dts/sdk/src/navigation/index.d.ts +2 -0
  78. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -2
  79. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -1
  80. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  81. package/dist/_dts/sdk/src/version.d.ts +1 -1
  82. package/dist/_dts/site-commands/src/commands.d.ts +13 -10
  83. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  84. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  85. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +17 -0
  86. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  88. package/dist/_dts/theme-core/src/cards/types.d.ts +3 -3
  89. package/dist/_dts/theme-core/src/footer/mode.d.ts +15 -0
  90. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  92. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -30
  93. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/schema.d.ts +1186 -34
  95. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +12 -1
  96. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +15 -0
  97. package/dist/cli/index.mjs +760 -374
  98. package/dist/client/{DiscountCodeDisclosure-BwGkvmVH.mjs → DiscountCodeDisclosure-D6TOf6Hi.mjs} +1 -1
  99. package/dist/client/{EventCombined.client-JnWE6Hzc.mjs → EventCombined.client-Dao3zxRk.mjs} +3 -3
  100. package/dist/client/{EventListing.client-DQewc_kg.mjs → EventListing.client-B2NNt4y1.mjs} +2 -2
  101. package/dist/client/{LeafletStaticMap-DPAU3SFt.mjs → LeafletStaticMap-BhwFo16w.mjs} +1 -1
  102. package/dist/client/{MagicLinkForm-D4kpWCbW.mjs → MagicLinkForm-BWnB7cMR.mjs} +2 -2
  103. package/dist/client/{StepIndicator-CBlkb4rA.mjs → StepIndicator-TzRiQ0BY.mjs} +2 -2
  104. package/dist/client/{accordion-DAIBVpTS.mjs → accordion-BPy-AJ4_.mjs} +1 -1
  105. package/dist/client/{bookingForm-DZ-4l5_1.mjs → bookingForm-BL4PGZds.mjs} +6 -6
  106. package/dist/client/bookings.mjs +143 -94
  107. package/dist/client/{buttons-DJgynGHQ.mjs → buttons-EBjyslaX.mjs} +144 -95
  108. package/dist/client/{carousel-D-SLfX8r.mjs → carousel-C2b7Cn9-.mjs} +1 -1
  109. package/dist/client/{cart-CEgbgJhX.mjs → cart-BQcbXIVD.mjs} +3 -3
  110. package/dist/client/{checkout-CXWrCRAA.mjs → checkout-DEmpGRJu.mjs} +3 -3
  111. package/dist/client/client.mjs +827 -434
  112. package/dist/client/{courseRegistration-DVmLrRVz.mjs → courseRegistration-BqRZPmsq.mjs} +7 -7
  113. package/dist/client/{eventCalendar-DCuyPY_c.mjs → eventCalendar-B8N_tSl5.mjs} +5 -5
  114. package/dist/client/{eventCombined-kP2CA2D4.mjs → eventCombined-Gjn6gtq7.mjs} +2 -2
  115. package/dist/client/{eventDetails-DU0LeF5e.mjs → eventDetails-M-VCxA-r.mjs} +3 -3
  116. package/dist/client/{eventListing-CcHF87BI.mjs → eventListing-DR19hqYi.mjs} +2 -2
  117. package/dist/client/{eventRegistration-DJnR0yFH.mjs → eventRegistration-BR02a0k3.mjs} +7 -7
  118. package/dist/client/{form-CH1lCusH.mjs → form-LY2xIbwg.mjs} +2 -2
  119. package/dist/client/{headerSection-CBPFZoku.mjs → headerSection-CYwwXJfh.mjs} +3 -3
  120. package/dist/client/hooks.mjs +377 -362
  121. package/dist/client/{locationMap-Cx1hBg5n.mjs → locationMap-DWnBXrFq.mjs} +2 -2
  122. package/dist/client/{newsletterForm-1ZL_ti9u.mjs → newsletterForm-D9s-fQ2P.mjs} +2 -2
  123. package/dist/client/{pricing-BIbzmV0G.mjs → pricing-DDq80oYc.mjs} +1 -1
  124. package/dist/client/{productDetail-BTh5gHBV.mjs → productDetail-B0SbWd45.mjs} +3 -3
  125. package/dist/client/{productList-Cc7OMrqN.mjs → productList-PwYlZn0y.mjs} +3 -3
  126. package/dist/client/{propsDecoder-oR-M-ISN.mjs → propsDecoder-BRWBiH7i.mjs} +33 -9
  127. package/dist/client/rendering/client.mjs +247 -40
  128. package/dist/client/rendering/islands.mjs +18 -18
  129. package/dist/client/rendering.mjs +478 -270
  130. package/dist/client/{shop-CQ_YbCnn.mjs → shop-CMwZPYME.mjs} +6 -6
  131. package/dist/client/{shop-commerce-BM-AoD3M.mjs → shop-commerce-BuxsFate.mjs} +5 -5
  132. package/dist/client/{shop-commerce-store-DFMQhU5p.mjs → shop-commerce-store-boYlEJ91.mjs} +1 -1
  133. package/dist/client/{shopShared-D0SKO2Cu.mjs → shopShared-D2naaOes.mjs} +2 -2
  134. package/dist/client/{useDiscountCodeUi-CrG4_ARt.mjs → useDiscountCodeUi-D9RHpVoj.mjs} +1 -1
  135. package/dist/client/{useEventFilters-CxK8Fekl.mjs → useEventFilters-igGiK1re.mjs} +3 -3
  136. package/dist/client/{usePolling-jcVryNgZ.mjs → usePolling-CI7MbsFB.mjs} +2 -2
  137. package/dist/preview-next/before-render.mjs +178 -0
  138. package/dist/preview-next/client/runtime.mjs +4 -4
  139. package/dist/preview-next/middleware.mjs +178 -0
  140. package/dist/{previewAuthStore-BPcJPzdz.mjs → previewAuthStore-a_cBD28m.mjs} +178 -0
  141. package/dist/{sdk-runtime-C39Rsk-x.mjs → sdk-runtime-MBzD-GmP.mjs} +2 -2
  142. package/dist/{separator-BoMSQnsP.mjs → separator-5ahRBC85.mjs} +1 -1
  143. package/dist/server/components.mjs +556 -366
  144. package/dist/server/config-validation.mjs +384 -363
  145. package/dist/server/config.mjs +384 -364
  146. package/dist/server/data.mjs +377 -362
  147. package/dist/server/index.mjs +179 -1
  148. package/dist/server/navigation.mjs +9 -3
  149. package/dist/server/next.mjs +1384 -995
  150. package/dist/server/page-converter.mjs +368 -355
  151. package/dist/server/prebuild.mjs +1 -1
  152. package/dist/server/rendering/server.mjs +539 -360
  153. package/dist/server/rendering.mjs +556 -366
  154. package/dist/server/routing.mjs +613 -543
  155. package/dist/server/server.mjs +554 -361
  156. package/dist/server/theme-bridge.mjs +189 -98
  157. package/dist/server/theme.mjs +161 -95
  158. package/dist/styles/index.css +7 -1
  159. package/package.json +1 -1
@@ -1,7 +1,6 @@
1
1
  import z, { z as z$1 } from "zod";
2
2
  import "react/jsx-runtime";
3
3
  import "react";
4
- //#region ../api/src/apiEndpointTypes.ts
5
4
  function blockedDemoMutationPolicy(classification, publicMessage) {
6
5
  if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
7
6
  return {
@@ -29,6 +28,7 @@ const TAG_TEMPLATES = {
29
28
  siteRouteOutcomes: "riverbank:site:{siteId}:route-outcomes",
30
29
  routeById: "riverbank:route:{routeId}",
31
30
  pageById: "riverbank:page:{pageId}",
31
+ pageSurfaceById: "riverbank:page-surface:{pageSurfaceId}",
32
32
  workflowRunById: "riverbank:workflow-run:{runId}",
33
33
  siteForms: "riverbank:site:{siteId}:forms",
34
34
  formById: "riverbank:form:{formId}",
@@ -52,7 +52,7 @@ const TAG_TEMPLATES = {
52
52
  blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
53
53
  blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
54
54
  blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
55
- TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents;
55
+ TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicCourses, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents;
56
56
  //#endregion
57
57
  //#region ../core/src/result.ts
58
58
  function ok(value) {
@@ -5072,104 +5072,153 @@ const showtimePill = defineButtonPersonality({
5072
5072
  }
5073
5073
  });
5074
5074
  //#endregion
5075
- //#region ../theme-core/src/buttons/personalities/index.ts
5076
- const buttonPersonalities = [
5077
- defineButtonPersonality({
5078
- id: "soft-pill",
5079
- name: "Soft Pill",
5080
- description: "Rounded pills with a gentle lift on hover. Quietly modern.",
5081
- tags: {
5082
- tone: "classic",
5083
- energy: "calm",
5084
- motion: "subtle",
5085
- era: "organic"
5075
+ //#region ../theme-core/src/buttons/personalities/soft-pill.ts
5076
+ /**
5077
+ * Soft Pill — rounded-full pill buttons with a hover lift. The default for
5078
+ * Calm Studio and Modern Wellness; reads as quietly modern and welcoming.
5079
+ */
5080
+ const softPill = defineButtonPersonality({
5081
+ id: "soft-pill",
5082
+ name: "Soft Pill",
5083
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
5084
+ tags: {
5085
+ tone: "classic",
5086
+ energy: "calm",
5087
+ motion: "subtle",
5088
+ era: "organic"
5089
+ },
5090
+ buttonSystem: {
5091
+ global: {
5092
+ cornerStyle: "pill",
5093
+ shadow: "low",
5094
+ textTransform: "none",
5095
+ fontWeight: 500,
5096
+ borderWidth: 2,
5097
+ hoverTransform: "lift",
5098
+ hoverColor: "none"
5086
5099
  },
5087
- buttonSystem: {
5088
- global: {
5089
- cornerStyle: "pill",
5090
- shadow: "low",
5091
- textTransform: "none",
5092
- fontWeight: 500,
5093
- borderWidth: 2,
5094
- hoverTransform: "lift",
5095
- hoverColor: "none"
5096
- },
5097
- variants: [
5098
- {
5099
- id: "primary",
5100
- name: "Primary",
5101
- enabled: true,
5102
- priority: 1,
5103
- background: {
5104
- type: "solid",
5105
- colorToken: "primary"
5106
- },
5107
- textColorToken: "primaryForeground",
5108
- borderRadius: "rounded-full",
5109
- shadow: {
5110
- elevation: "low",
5111
- softness: "soft",
5112
- position: "bottom"
5113
- },
5114
- effects: {
5115
- hover: [{
5116
- effectId: "lift",
5117
- options: { translateY: "-1px" }
5118
- }],
5119
- active: [{
5120
- effectId: "scale-down",
5121
- options: { scale: "0.98" }
5122
- }]
5123
- }
5124
- },
5125
- {
5126
- id: "secondary",
5127
- name: "Secondary",
5128
- enabled: true,
5129
- priority: 2,
5130
- background: { type: "transparent" },
5131
- textColorToken: "primary",
5132
- borderRadius: "rounded-full",
5133
- border: {
5134
- widthClass: "border-2",
5135
- colorToken: "primary"
5136
- },
5137
- effects: { hover: [{
5138
- effectId: "background-on-hover",
5139
- options: { colorToken: "surface" }
5140
- }] }
5100
+ variants: [
5101
+ {
5102
+ id: "primary",
5103
+ name: "Primary",
5104
+ enabled: true,
5105
+ priority: 1,
5106
+ background: {
5107
+ type: "solid",
5108
+ colorToken: "primary"
5141
5109
  },
5142
- {
5143
- id: "outline",
5144
- name: "Outline",
5145
- enabled: true,
5146
- priority: 3,
5147
- background: { type: "transparent" },
5148
- textColorToken: "text",
5149
- borderRadius: "rounded-full",
5150
- border: {
5151
- widthClass: "border",
5152
- colorToken: "border"
5153
- },
5154
- effects: { hover: [{
5155
- effectId: "background-on-hover",
5156
- options: { colorToken: "surface" }
5157
- }] }
5110
+ textColorToken: "primaryForeground",
5111
+ borderRadius: "rounded-full",
5112
+ shadow: {
5113
+ elevation: "low",
5114
+ softness: "soft",
5115
+ position: "bottom"
5158
5116
  },
5159
- {
5160
- id: "ghost",
5161
- name: "Ghost",
5162
- enabled: true,
5163
- priority: 3,
5164
- background: { type: "transparent" },
5165
- textColorToken: "text",
5166
- borderRadius: "rounded-full",
5167
- effects: { hover: [{
5168
- effectId: "background-on-hover",
5169
- options: { colorToken: "surface" }
5170
- }] }
5117
+ effects: {
5118
+ hover: [{
5119
+ effectId: "lift",
5120
+ options: { translateY: "-1px" }
5121
+ }],
5122
+ active: [{
5123
+ effectId: "scale-down",
5124
+ options: { scale: "0.98" }
5125
+ }]
5171
5126
  }
5172
- ]
5127
+ },
5128
+ {
5129
+ id: "secondary",
5130
+ name: "Secondary",
5131
+ enabled: true,
5132
+ priority: 2,
5133
+ background: { type: "transparent" },
5134
+ textColorToken: "primary",
5135
+ borderRadius: "rounded-full",
5136
+ border: {
5137
+ widthClass: "border-2",
5138
+ colorToken: "primary"
5139
+ },
5140
+ effects: { hover: [{
5141
+ effectId: "background-on-hover",
5142
+ options: { colorToken: "surface" }
5143
+ }] }
5144
+ },
5145
+ {
5146
+ id: "outline",
5147
+ name: "Outline",
5148
+ enabled: true,
5149
+ priority: 3,
5150
+ background: { type: "transparent" },
5151
+ textColorToken: "text",
5152
+ borderRadius: "rounded-full",
5153
+ border: {
5154
+ widthClass: "border",
5155
+ colorToken: "border"
5156
+ },
5157
+ effects: { hover: [{
5158
+ effectId: "background-on-hover",
5159
+ options: { colorToken: "surface" }
5160
+ }] }
5161
+ },
5162
+ {
5163
+ id: "ghost",
5164
+ name: "Ghost",
5165
+ enabled: true,
5166
+ priority: 3,
5167
+ background: { type: "transparent" },
5168
+ textColorToken: "text",
5169
+ borderRadius: "rounded-full",
5170
+ effects: { hover: [{
5171
+ effectId: "background-on-hover",
5172
+ options: { colorToken: "surface" }
5173
+ }] }
5174
+ }
5175
+ ]
5176
+ }
5177
+ });
5178
+ //#endregion
5179
+ //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
5180
+ const solidSecondary = {
5181
+ id: "secondary",
5182
+ name: "Secondary",
5183
+ enabled: true,
5184
+ priority: 2,
5185
+ background: {
5186
+ type: "solid",
5187
+ colorToken: "secondary"
5188
+ },
5189
+ textColorToken: "onSecondary",
5190
+ borderRadius: "rounded-full",
5191
+ shadow: {
5192
+ elevation: "none",
5193
+ softness: null,
5194
+ position: "bottom"
5195
+ },
5196
+ effects: {
5197
+ hover: [{
5198
+ effectId: "background-on-hover-alpha",
5199
+ options: {
5200
+ colorToken: "secondary",
5201
+ opacity: 88
5202
+ }
5203
+ }],
5204
+ active: [{
5205
+ effectId: "scale-down",
5206
+ options: { scale: "0.98" }
5207
+ }]
5208
+ }
5209
+ };
5210
+ //#endregion
5211
+ //#region ../theme-core/src/buttons/personalities/index.ts
5212
+ const buttonPersonalities = [
5213
+ softPill,
5214
+ defineButtonPersonality({
5215
+ id: "two-tone-pill",
5216
+ name: "Two-tone Pill",
5217
+ description: "Rounded pills with distinct solid primary and secondary brand colours.",
5218
+ tags: softPill.tags,
5219
+ buttonSystem: {
5220
+ ...softPill.buttonSystem,
5221
+ variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
5173
5222
  }
5174
5223
  }),
5175
5224
  earthPill,
@@ -6703,6 +6752,7 @@ const navFontWeight = z$1.enum([
6703
6752
  "bold"
6704
6753
  ]);
6705
6754
  const headerMaxWidth = z$1.enum(["container", "full"]);
6755
+ const headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
6706
6756
  const headerContainerSchema = z$1.object({
6707
6757
  rounded: z$1.enum([
6708
6758
  "none",
@@ -6847,6 +6897,7 @@ const headerSchema = z$1.object({
6847
6897
  positioning: headerPositioning,
6848
6898
  shrinkOnScroll: z$1.boolean(),
6849
6899
  maxWidth: headerMaxWidth,
6900
+ barFrame: headerBarFrame.optional(),
6850
6901
  logoOverride: mediaSchema$1.nullable().optional(),
6851
6902
  background: headerBackgroundSchema.default({
6852
6903
  type: "color",
@@ -6856,6 +6907,7 @@ const headerSchema = z$1.object({
6856
6907
  navStyle: headerNavStyle,
6857
6908
  navColor: themeColorTokenSchema.nullable().optional(),
6858
6909
  navWeight: navFontWeight.default("medium"),
6910
+ navFontRole: z$1.enum(["body", "heading"]).optional(),
6859
6911
  navTypography: z$1.enum(["body", "heading"]).optional(),
6860
6912
  navTextSize: navLinkStyleSchema.shape.textSize,
6861
6913
  navPlacement: z$1.enum(["end", "center"]).optional(),
@@ -6871,7 +6923,21 @@ const headerSchema = z$1.object({
6871
6923
  ctaTreatment: headerCtaTreatmentSchema.optional(),
6872
6924
  ctaVariant: z$1.string().min(1).optional(),
6873
6925
  dropdownStyle: dropdownStyleSchema
6874
- });
6926
+ }).transform(normaliseHeaderNavFontRole);
6927
+ /**
6928
+ * Normalises the legacy `navTypography` font-role alias into the canonical
6929
+ * `navFontRole` field so persisted themes migrate at the parse boundary without
6930
+ * a data migration. `navFontRole` always wins when both are present; the legacy
6931
+ * field is dropped so we never carry a dual write forward.
6932
+ */
6933
+ function normaliseHeaderNavFontRole(header) {
6934
+ if (header.navTypography === void 0) return header;
6935
+ const { navTypography, ...rest } = header;
6936
+ return header.navFontRole === void 0 ? {
6937
+ ...rest,
6938
+ navFontRole: navTypography
6939
+ } : rest;
6940
+ }
6875
6941
  const footerVariant = z$1.enum([
6876
6942
  "simple",
6877
6943
  "columns",
@@ -8779,7 +8845,7 @@ const overlayLogoAccommodations = [
8779
8845
  * optional nested styling fields that would otherwise leak from another Look.
8780
8846
  */
8781
8847
  function baseHeader(theme) {
8782
- const { navLinkStyle: _navLinkStyle, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
8848
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
8783
8849
  return {
8784
8850
  ...header,
8785
8851
  navContainer: {
@@ -8928,6 +8994,17 @@ const headerStyleCatalog = defineExactCatalog()([
8928
8994
  navTypography: "brand-caps",
8929
8995
  moods: ["expressive"]
8930
8996
  },
8997
+ {
8998
+ id: asHeaderStyleId("brand-capsule"),
8999
+ label: "Brand Capsule",
9000
+ description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
9001
+ supportedLayoutIds: supportedLayouts(["classic"]),
9002
+ navInteraction: "pill-background",
9003
+ surface: "brand-solid",
9004
+ defaultDepth: "shadow",
9005
+ navTypography: "quiet-caps",
9006
+ moods: ["expressive", "professional"]
9007
+ },
8931
9008
  {
8932
9009
  id: asHeaderStyleId("serif-line"),
8933
9010
  label: "Serif Line",
@@ -9021,6 +9098,7 @@ const headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
9021
9098
  "brand-bar",
9022
9099
  "brand-underline",
9023
9100
  "brand-pill",
9101
+ "brand-capsule",
9024
9102
  "serif-line",
9025
9103
  "flat-tabs"
9026
9104
  ])],
@@ -9058,6 +9136,11 @@ headerStyleRepairChain([
9058
9136
  "brand-pill",
9059
9137
  "brand-bar",
9060
9138
  "minimal"
9139
+ ]), headerStyleRepairChain([
9140
+ "brand-capsule",
9141
+ "brand-pill",
9142
+ "brand-bar",
9143
+ "minimal"
9061
9144
  ]), headerStyleRepairChain([
9062
9145
  "pill-nav",
9063
9146
  "soft-bar",
@@ -11295,6 +11378,7 @@ const curatedSiteStyles = [
11295
11378
  ],
11296
11379
  buttonPersonalityChoices: [
11297
11380
  buttonChoice("soft-pill"),
11381
+ buttonChoice("two-tone-pill"),
11298
11382
  buttonChoice("pebble"),
11299
11383
  buttonChoice("editorial-link"),
11300
11384
  buttonChoice("brushed-wash")
@@ -12474,6 +12558,7 @@ const curatedSiteStyles = [
12474
12558
  ],
12475
12559
  buttonPersonalityChoices: [
12476
12560
  buttonChoice("quiet-arrow"),
12561
+ buttonChoice("two-tone-pill"),
12477
12562
  buttonChoice("flat-ink"),
12478
12563
  buttonChoice("editorial-link")
12479
12564
  ],
@@ -14908,6 +14993,7 @@ function devValidate(node) {
14908
14993
  }
14909
14994
  //#endregion
14910
14995
  //#region ../blocks/src/system/node/fragments/backgroundLayer.ts
14996
+ const BACKGROUND_FRAME_BASE_CLASS = "rb-background-frame rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-isolate rb-pointer-events-none";
14911
14997
  /**
14912
14998
  * Creates background layer nodes for rendering backgrounds from field data.
14913
14999
  *
@@ -14973,6 +15059,34 @@ function backgroundLayer(path, options = {}) {
14973
15059
  ];
14974
15060
  }
14975
15061
  /**
15062
+ * Wrap decorative background layers in their own clipping frame.
15063
+ *
15064
+ * Foreground content remains outside this frame, so editor outlines, focus
15065
+ * rings, and floating controls are never clipped by a visual background.
15066
+ * Backgrounds that explicitly opt into overflow keep that behavior within
15067
+ * the decorative layer rather than changing the content root.
15068
+ */
15069
+ function backgroundFrame(path, options = {}) {
15070
+ const { leadingNodes = [], ...layerOptions } = options;
15071
+ const framedLayerOptions = {
15072
+ ...layerOptions,
15073
+ styleClassName: layerOptions.styleClassName ?? "background-style rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none",
15074
+ imageClassName: layerOptions.imageClassName ?? "rb-absolute rb-z-0",
15075
+ overlayClassName: layerOptions.overlayClassName ?? "background-overlay rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none"
15076
+ };
15077
+ return el("div", {
15078
+ className: { $bind: {
15079
+ from: path,
15080
+ transforms: [{
15081
+ id: "background.resolveFrameClassName",
15082
+ options: { baseClass: BACKGROUND_FRAME_BASE_CLASS }
15083
+ }],
15084
+ fallback: `${BACKGROUND_FRAME_BASE_CLASS} rb-overflow-hidden`
15085
+ } },
15086
+ style: { borderRadius: "inherit" }
15087
+ }, [...leadingNodes, ...backgroundLayer(path, framedLayerOptions)]);
15088
+ }
15089
+ /**
14976
15090
  * Creates a media node for rendering background image/video media with conditional rendering.
14977
15091
  *
14978
15092
  * This helper creates a media element that:
@@ -15134,8 +15248,8 @@ function sectionContainer(children, opts) {
15134
15248
  * - content
15135
15249
  */
15136
15250
  function styledContainer(config) {
15137
- const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-hidden", imageClassName = "rb-absolute rb-z-neg-10", constrainWidth = true } = config;
15138
- const backgroundNodes = backgroundLayer(`${bindFrom}.background`, { imageClassName });
15251
+ const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-visible", imageClassName = "rb-absolute rb-z-0", constrainWidth = true } = config;
15252
+ const backgroundNode = backgroundFrame(`${bindFrom}.background`, { imageClassName });
15139
15253
  const childrenArray = Array.isArray(children) ? children : [children];
15140
15254
  const { className: _ignoredClassName, style: _ignoredStyle, ...safeRootProps } = rootProps ?? {};
15141
15255
  return el(rootType, {
@@ -15158,7 +15272,7 @@ function styledContainer(config) {
15158
15272
  }],
15159
15273
  fallback: constrainWidth ? `${baseClassName} rb-container` : baseClassName
15160
15274
  } }
15161
- }, [...backgroundNodes, ...childrenArray]);
15275
+ }, [backgroundNode, ...childrenArray]);
15162
15276
  }
15163
15277
  //#endregion
15164
15278
  //#region ../blocks/src/system/spacing.ts
@@ -15291,7 +15405,7 @@ const DEFAULT_SECTION_SPACING = "medium";
15291
15405
  * - Creating a section wrapper with background theme
15292
15406
  * - Adding background color/gradient/image layers
15293
15407
  * - Binding className to section styles with transform
15294
- * - Binding allowOverflow for background positioning
15408
+ * - Keeping foreground overflow visible while decorative backgrounds clip independently
15295
15409
  * - Wrapping content children
15296
15410
  *
15297
15411
  * Use this helper to eliminate 25+ lines of boilerplate section setup code.
@@ -15327,8 +15441,8 @@ const DEFAULT_SECTION_SPACING = "medium";
15327
15441
  * });
15328
15442
  */
15329
15443
  function styledSection(config) {
15330
- const { children, baseClass = "rb-px-6", spacing = DEFAULT_SECTION_SPACING, background = "background", bindFrom = "_sectionStyles", imageClassName = "rb-absolute rb-z-neg-10", renderBackgroundImage = true, backgroundImageLoading, backgroundImageFetchPriority, allowOverflow = false, fullWidthPath } = config;
15331
- const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
15444
+ const { children, baseClass = "rb-px-6", spacing = DEFAULT_SECTION_SPACING, background = "background", bindFrom = "_sectionStyles", imageClassName = "rb-absolute rb-z-0", renderBackgroundImage = true, backgroundImageLoading, backgroundImageFetchPriority, fullWidthPath } = config;
15445
+ const renderedBackgroundNode = backgroundFrame(`${bindFrom}.background`, {
15332
15446
  imageClassName,
15333
15447
  fallbackToken: background,
15334
15448
  omitImageLayer: !renderBackgroundImage,
@@ -15351,13 +15465,8 @@ function styledSection(config) {
15351
15465
  fullWidthPath
15352
15466
  }
15353
15467
  }]
15354
- } },
15355
- allowOverflow: allowOverflow ? true : { $bind: {
15356
- from: `${bindFrom}.background`,
15357
- transforms: [{ id: "background.resolveAllowOverflow" }],
15358
- fallback: false
15359
15468
  } }
15360
- }, [...renderedBackgroundNodes, ...childrenArray]);
15469
+ }, [renderedBackgroundNode, ...childrenArray]);
15361
15470
  }
15362
15471
  //#endregion
15363
15472
  //#region ../blocks/src/system/node/fragments/ctaButton.ts
@@ -16218,9 +16327,12 @@ function responsiveTwoColumn({ image, text, ratioFrom, imagePositionFrom, gapCla
16218
16327
  //#endregion
16219
16328
  //#region ../blocks/src/system/node/fragments/styledCard.ts
16220
16329
  function styledCard(children, opts, ...mods) {
16221
- const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-hidden rb-border";
16222
- const defaultBackgroundLayer = el("div", { className: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none rb-bg-surface" });
16223
- const backgroundNodes = backgroundLayer(opts.backgroundFrom);
16330
+ const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-visible rb-border";
16331
+ const defaultBackgroundLayer = el("div", {
16332
+ className: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none rb-bg-surface",
16333
+ style: { borderRadius: "inherit" }
16334
+ });
16335
+ const backgroundNode = backgroundFrame(opts.backgroundFrom);
16224
16336
  const style = {
16225
16337
  ...opts.style ?? {},
16226
16338
  borderColor: { $bind: {
@@ -16247,7 +16359,7 @@ function styledCard(children, opts, ...mods) {
16247
16359
  ...style ? { style } : {}
16248
16360
  }, [
16249
16361
  defaultBackgroundLayer,
16250
- ...backgroundNodes,
16362
+ backgroundNode,
16251
16363
  ...children
16252
16364
  ], ...mods);
16253
16365
  }
@@ -17256,7 +17368,7 @@ function buildTestimonialCard(...mods) {
17256
17368
  }, props({ value: "“" })), richText({ className: "rb-prose rb-max-w-none" }, bind("testimonial.content.body"), when("testimonial.content.body"))]), el("div", { className: "rb-testimonial-attribution" }, buildAttributionNodes())])], {
17257
17369
  stylesFrom: "content._cardStyles",
17258
17370
  backgroundFrom: "content._cardStyles.background",
17259
- baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-hidden rb-p-8"
17371
+ baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-visible rb-p-8"
17260
17372
  }, ...mods);
17261
17373
  }
17262
17374
  /**
@@ -17728,39 +17840,6 @@ const formEmbedFragment = defineFragment({
17728
17840
  }
17729
17841
  });
17730
17842
  //#endregion
17731
- //#region ../blocks/src/system/fragments/library/footerBottomText.ts
17732
- const footerBottomTextFragment = defineFragment({
17733
- id: "footerBottomText",
17734
- title: "Footer Text",
17735
- description: "Rich text content for the main footer body and optional bottom bar.",
17736
- fields: [{
17737
- id: "bodyText",
17738
- type: "richText",
17739
- label: "Body text",
17740
- description: "Appears in the main footer area.",
17741
- ui: { variant: "limited" }
17742
- }, {
17743
- id: "bottomText",
17744
- type: "richText",
17745
- label: "Bottom bar text",
17746
- description: "Appears in the optional footer bottom bar.",
17747
- ui: { variant: "limited" }
17748
- }],
17749
- layout: [richText({
17750
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
17751
- style: textColorStyle("text/80")
17752
- }, when("bodyText"), bind("bodyText", { transforms: [{
17753
- id: "content.interpolateRichTextTokens",
17754
- options: { tokens: ["year", "site_name"] }
17755
- }] })), richText({
17756
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
17757
- style: textColorStyle("text/80")
17758
- }, when("bottomText"), bind("bottomText", { transforms: [{
17759
- id: "content.interpolateRichTextTokens",
17760
- options: { tokens: ["year", "site_name"] }
17761
- }] }))]
17762
- });
17763
- //#endregion
17764
17843
  //#region ../blocks/src/system/fragments/library/singleButton.ts
17765
17844
  const singleButtonFragment = defineFragment({
17766
17845
  id: "singleButton",
@@ -17933,7 +18012,7 @@ function createFaqAccordionLayout(options = {}) {
17933
18012
  options: {
17934
18013
  axis: "all",
17935
18014
  includeSpacing: false,
17936
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
18015
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-visible"
17937
18016
  }
17938
18017
  }]
17939
18018
  },
@@ -19057,7 +19136,6 @@ function splitLayoutWith(children) {
19057
19136
  }
19058
19137
  }),
19059
19138
  renderBackgroundImage: false,
19060
- allowOverflow: true,
19061
19139
  baseClass: ""
19062
19140
  });
19063
19141
  }
@@ -19685,7 +19763,7 @@ function postCard(children, ...mods) {
19685
19763
  return styledCard(children, {
19686
19764
  stylesFrom: "content._cardStyles",
19687
19765
  backgroundFrom: "content._cardStyles.background",
19688
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-flex-col rb-h-full"
19766
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-flex rb-flex-col rb-h-full"
19689
19767
  }, ...mods);
19690
19768
  }
19691
19769
  const gridPostCard = postCard([postImageLink("rb-h-48 rb-w-full rb-object-cover rb-transition-transform rb-hover-scale-105", {
@@ -19721,7 +19799,7 @@ const stackPostCard = styledCard([inline({
19721
19799
  ])])], {
19722
19800
  stylesFrom: "content._cardStyles",
19723
19801
  backgroundFrom: "content._cardStyles.background",
19724
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border"
19802
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border"
19725
19803
  }, repeat("data.posts", "post"));
19726
19804
  const emptyState$2 = {
19727
19805
  ...styledCard([text({
@@ -19730,7 +19808,7 @@ const emptyState$2 = {
19730
19808
  }, bind("content.emptyMessage", { fallback: "No posts published yet." }))], {
19731
19809
  stylesFrom: "content._cardStyles",
19732
19810
  backgroundFrom: "content._cardStyles.background",
19733
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-border-dashed rb-p-8 rb-text-center"
19811
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-border-dashed rb-p-8 rb-text-center"
19734
19812
  }),
19735
19813
  $when: {
19736
19814
  when: { from: "data.posts[0]" },
@@ -19740,7 +19818,7 @@ const emptyState$2 = {
19740
19818
  function blogListingShell(children) {
19741
19819
  return styledSection({
19742
19820
  children: styledContainer({
19743
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden",
19821
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
19744
19822
  children
19745
19823
  }),
19746
19824
  baseClass: ""
@@ -20152,7 +20230,7 @@ const copyLayout = fragmentLayoutNode$1(formCopyFragment.layout);
20152
20230
  const formSurface = styledContainer({
20153
20231
  bindFrom: "_containerStyles",
20154
20232
  constrainWidth: false,
20155
- baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
20233
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
20156
20234
  children: fragmentLayoutNode$1(formEmbedFragment.layout)
20157
20235
  });
20158
20236
  function createFormLayout(variant) {
@@ -21369,6 +21447,7 @@ const headerRootClassTransform = {
21369
21447
  ];
21370
21448
  const variant = header?.variant;
21371
21449
  if (variant && VALID_VARIANTS.includes(variant)) classes.push(`header-variant-${variant}`);
21450
+ if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
21372
21451
  return joinClasses(classes);
21373
21452
  }
21374
21453
  };
@@ -21892,7 +21971,7 @@ function desktopOnlyDisplay(display) {
21892
21971
  }
21893
21972
  //#endregion
21894
21973
  //#region ../blocks/src/system/blocks/site-header.ts
21895
- const whenTransformed$1 = (from, transformId, equals = true) => (node) => ({
21974
+ const whenTransformed = (from, transformId, equals = true) => (node) => ({
21896
21975
  ...node,
21897
21976
  $when: {
21898
21977
  when: {
@@ -21920,7 +21999,7 @@ const logoRow = link({
21920
21999
  text({
21921
22000
  as: "strong",
21922
22001
  className: "header-logo-text rb-truncate"
21923
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22002
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21924
22003
  ]);
21925
22004
  const centeredLogoRow = link({
21926
22005
  href: "/",
@@ -21940,7 +22019,7 @@ const centeredLogoRow = link({
21940
22019
  text({
21941
22020
  as: "strong",
21942
22021
  className: "header-logo-text"
21943
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22022
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21944
22023
  ]);
21945
22024
  const createNavRow = (className, align = "end") => navRow({
21946
22025
  className: `${className} header-nav-row`,
@@ -22072,7 +22151,7 @@ const classicLayout = inline({
22072
22151
  logoRow,
22073
22152
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
22074
22153
  headerCta
22075
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "inline"));
22154
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
22076
22155
  const classicCenteredNavLayout = inline({
22077
22156
  className: bindProp("$root.theme.header.maxWidth", {
22078
22157
  transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
@@ -22083,7 +22162,7 @@ const classicCenteredNavLayout = inline({
22083
22162
  logoRow,
22084
22163
  createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
22085
22164
  headerCta
22086
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "centered"));
22165
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
22087
22166
  const centeredLayout = stack({
22088
22167
  gap: "md",
22089
22168
  align: "center",
@@ -22146,7 +22225,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
22146
22225
  transforms: pipe(tx("layout.headerSectionBackground")),
22147
22226
  fallback: "background"
22148
22227
  }),
22149
- allowOverflow: true,
22150
22228
  className: bindProp("$root.theme.header", {
22151
22229
  transforms: pipe(tx("layout.headerRootClass")),
22152
22230
  fallback: "header-root rb-z-40 rb-w-full transition-theme"
@@ -22196,218 +22274,154 @@ const footerNavGroupsLayout = stack({
22196
22274
  linkRequired: true,
22197
22275
  target: { $bind: { from: "entry.target" } },
22198
22276
  rel: { $bind: { from: "entry.rel" } }
22199
- }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], when("footerMenu.groups"));
22277
+ }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
22200
22278
  //#endregion
22201
22279
  //#region ../blocks/src/system/blocks/site-footer.ts
22202
- const footerTextLayout = () => materializeFragment({ fragment: footerBottomTextFragment }).layout;
22203
- const whenTransformed = (from, transformId, equals = true) => (node) => ({
22204
- ...node,
22205
- $when: {
22206
- when: {
22207
- from,
22208
- transforms: [{ id: transformId }]
22209
- },
22210
- equals
22211
- }
22212
- });
22213
- const bottomBarTextLayout = () => {
22214
- const bottomTextNode = footerTextLayout()[1];
22215
- return bottomTextNode ? [bottomTextNode] : [];
22216
- };
22217
- const bodyTextLayout = () => {
22218
- const bodyTextNode = footerTextLayout()[0];
22219
- return bodyTextNode ? [bodyTextNode] : [];
22220
- };
22221
- const businessAddressLayout = () => [text({
22222
- as: "p",
22223
- className: "rb-caption rb-opacity-80"
22224
- }, bind("site.businessAddress.displayAddress"), when("content.showBusinessAddress", { equals: true }))];
22225
- const inlineBottomTextLayout = () => {
22226
- const bottomTextNode = footerTextLayout()[1];
22227
- if (!bottomTextNode) return [];
22228
- return [when("$root.theme.footer.bottomBar.enabled", {
22229
- equals: true,
22230
- not: true
22231
- })(bottomTextNode)];
22232
- };
22233
- const simpleFooterLayout = stack({
22234
- gap: "md",
22235
- align: "start",
22236
- className: { $bind: {
22237
- from: "$root.theme.footer",
22238
- transforms: [{ id: "layout.footerSimpleRootClass" }],
22239
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-items-start rb-gap-4 rb-py-10 rb-text-left"
22240
- } }
22241
- }, [
22242
- link({
22243
- href: "/",
22244
- className: { $bind: {
22245
- from: "$root.theme.footer.logo",
22246
- transforms: [{
22247
- id: "layout.footerLogoClass",
22248
- options: { requireExplicitShow: true }
22249
- }],
22250
- fallback: "rb-hidden"
22251
- } }
22252
- }, [
22253
- media({ className: { $bind: {
22254
- from: "$root.theme.footer.logo",
22255
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22256
- fallback: "rb-w-auto"
22257
- } } }, when("content.logo"), bind("content.logo")),
22258
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
22259
- from: "$root.theme.footer.logo",
22260
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22261
- fallback: "rb-w-auto"
22262
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
22263
- text({
22264
- as: "strong",
22265
- className: "footer-logo-text rb-nav-text"
22266
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22267
- ]),
22268
- footerNav({
22269
- collectionPath: "footerMenu.items",
22270
- mode: "flatten",
22271
- className: { $bind: {
22272
- from: "$root.theme.footer.navLayout",
22273
- transforms: [{ id: "layout.footerSimpleNavClass" }],
22274
- fallback: "footer-nav rb-flex rb-flex-wrap rb-justify-start rb-gap-x-6 rb-gap-y-3"
22275
- } },
22276
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
22277
- }),
22278
- ...bodyTextLayout(),
22279
- ...businessAddressLayout(),
22280
- ...inlineBottomTextLayout()
22281
- ], when("$root.theme.footer.variant", { equals: "simple" }));
22282
- const columnsFooterLayout = stack({
22283
- gap: "xl",
22284
- align: "start",
22280
+ const brandLogo = link({
22281
+ href: "/",
22285
22282
  className: { $bind: {
22286
- from: "$root.theme.footer.maxWidth",
22283
+ from: "$root.theme.footer.logo",
22287
22284
  transforms: [{
22288
- id: "layout.maxWidthClass",
22289
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
22285
+ id: "layout.footerLogoClass",
22286
+ options: { base: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline" }
22290
22287
  }],
22291
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
22288
+ fallback: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline"
22292
22289
  } }
22293
- }, [
22294
- footerNavGroupsLayout,
22295
- inline({ className: "rb-flex rb-w-full rb-flex-wrap rb-items-center rb-justify-between rb-gap-4" }, [text({
22296
- as: "strong",
22297
- className: "rb-block rb-nav-text",
22298
- style: textColorStyle("text")
22299
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" })), footerNav({
22300
- collectionPath: "footerMenu.items",
22301
- mode: "links-only",
22302
- className: "rb-flex rb-flex-wrap rb-justify-end rb-gap-x-6 rb-gap-y-3",
22303
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
22304
- })]),
22305
- ...bodyTextLayout(),
22306
- ...businessAddressLayout(),
22307
- ...inlineBottomTextLayout()
22308
- ], when("$root.theme.footer.variant", { equals: "columns" }));
22309
- const splitFooterLayout = stack({
22310
- gap: "xl",
22311
- align: "start",
22290
+ }, [media({ className: { $bind: {
22291
+ from: "$root.theme.footer.logo",
22292
+ transforms: [{
22293
+ id: "layout.footerLogoMediaClass",
22294
+ options: { base: "rb-h-10 rb-w-auto" }
22295
+ }],
22296
+ fallback: "rb-h-10 rb-w-auto"
22297
+ } } }, when("module.showLogo", { equals: true }), when("content.logo"), bind("content.logo")), text({
22298
+ as: "strong",
22299
+ className: "footer-logo-text rb-nav-text"
22300
+ }, when("module.showTitle", { equals: true }), bind("site.title", { fallback: "Your Site" }))], when("module.kind", { equals: "brand" }));
22301
+ const navigation = stack({
22302
+ gap: "md",
22303
+ className: "rb-w-full"
22304
+ }, [footerNavGroupsLayout, footerNav({
22305
+ collectionPath: "footerMenu.items",
22306
+ mode: "links-only",
22312
22307
  className: { $bind: {
22313
- from: "$root.theme.footer.maxWidth",
22314
- transforms: [{
22315
- id: "layout.maxWidthClass",
22316
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
22317
- }],
22318
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
22319
- } }
22308
+ from: "module.navigationClassName",
22309
+ fallback: "footer-nav rb-flex rb-flex-wrap rb-gap-x-6 rb-gap-y-3"
22310
+ } },
22311
+ linkClassName: "footer-nav-link rb-nav-text transition-theme-standard"
22312
+ })], when("module.kind", { equals: "navigation" }));
22313
+ const legalNavigation = footerNav({
22314
+ collectionPath: "legalFooterMenu.items",
22315
+ mode: "links-only",
22316
+ className: "rb-flex rb-flex-wrap rb-gap-x-4 rb-gap-y-2",
22317
+ linkClassName: "footer-nav-link rb-caption transition-theme-standard"
22318
+ });
22319
+ const address = text({
22320
+ as: "address",
22321
+ className: "rb-not-italic rb-opacity-80"
22322
+ }, when("module.kind", { equals: "business-address" }), bind("module.address"));
22323
+ const contact = stack({
22324
+ gap: "sm",
22325
+ className: "rb-items-start"
22326
+ }, [link({
22327
+ href: { $bind: { from: "contactLink.href" } },
22328
+ className: "rb-nav-text rb-break-words transition-theme-standard"
22329
+ }, [text({ as: "span" }, bind("contactLink.label"))], repeat("module.contactLinks", "contactLink"))], when("module.kind", { equals: "contact" }));
22330
+ const hours = stack({
22331
+ gap: "sm",
22332
+ className: "rb-w-full"
22333
+ }, [inline({ className: "rb-flex rb-w-full rb-justify-between rb-gap-4" }, [text({
22334
+ as: "span",
22335
+ className: "rb-label"
22336
+ }, bind("hoursDay.weekday")), text({
22337
+ as: "span",
22338
+ className: "rb-caption rb-opacity-80"
22339
+ }, bind("hoursDay.hours"))], repeat("module.openingHours", "hoursDay")), text({
22340
+ as: "p",
22341
+ className: "rb-caption rb-opacity-70"
22342
+ }, bind("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
22343
+ const socials = inline({ className: "rb-flex rb-flex-wrap rb-gap-x-5 rb-gap-y-3" }, [link({
22344
+ href: { $bind: { from: "social.href" } },
22345
+ target: "_blank",
22346
+ rel: "noreferrer noopener",
22347
+ "aria-label": { $bind: { from: "social.label" } },
22348
+ className: "rb-nav-text transition-theme-standard"
22349
+ }, [icon({ className: "rb-h-5 rb-w-5" }, bind("social.icon"), when("social.icon")), text({ as: "span" }, bind("social.label"), when("social.icon", { equals: null }))], repeat("module.socialLinks", "social"))], when("module.kind", { equals: "social-links" }));
22350
+ const authoredCopy = richText({
22351
+ className: "rb-prose rb-prose-sm rb-max-w-none",
22352
+ style: textColorStyle("text/80")
22353
+ }, when("module.content"), bind("module.content", { transforms: [{
22354
+ id: "content.interpolateRichTextTokens",
22355
+ options: { tokens: ["year", "site_name"] }
22356
+ }] }));
22357
+ const footerGroup = stack({
22358
+ gap: "md",
22359
+ align: "stretch",
22360
+ className: "rb-min-w-0",
22361
+ "data-footer-group": { $bind: { from: "group.kind" } }
22362
+ }, [stack({
22363
+ gap: "md",
22364
+ align: "start",
22365
+ "data-preview-footer-module-id": { $bind: { from: "module.id" } }
22320
22366
  }, [
22321
- inline({ className: { $bind: {
22322
- from: "$root.theme.footer.logo",
22323
- transforms: [{ id: "layout.footerSplitMainClass" }],
22324
- fallback: "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"
22325
- } } }, [stack({}, [footerNav({
22326
- collectionPath: "footerMenu.items",
22327
- mode: "flatten",
22328
- className: { $bind: {
22329
- from: "$root.theme.footer.navLayout",
22330
- transforms: [{ id: "layout.footerSplitNavSingleClass" }],
22331
- fallback: "rb-w-full rb-space-y-3 rb-text-left"
22332
- } },
22333
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-whitespace-nowrap rb-nav-text transition-theme-standard"
22334
- })]), link({
22335
- href: "/",
22336
- className: { $bind: {
22337
- from: "$root.theme.footer.logo",
22338
- transforms: [{ id: "layout.footerLogoClass" }],
22339
- fallback: "footer-logo rb-inline-flex rb-items-center rb-justify-end rb-gap-3 rb-self-end rb-no-underline rb-text-right rb-transition-opacity rb-hover-opacity-80"
22340
- } }
22341
- }, [
22342
- media({ className: { $bind: {
22343
- from: "$root.theme.footer.logo",
22344
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22345
- fallback: "rb-w-auto"
22346
- } } }, when("content.logo"), bind("content.logo")),
22347
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
22348
- from: "$root.theme.footer.logo",
22349
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22350
- fallback: "rb-w-auto"
22351
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
22352
- text({
22353
- as: "strong",
22354
- className: "footer-logo-text rb-nav-text"
22355
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22356
- ])]),
22357
- ...businessAddressLayout(),
22358
- ...inlineBottomTextLayout()
22359
- ], when("$root.theme.footer.variant", { equals: "split" }));
22360
- const footerLayout = section({
22361
- background: "background",
22367
+ text({
22368
+ as: "h2",
22369
+ className: "rb-label",
22370
+ style: textColorStyle("text/70")
22371
+ }, bind("module.heading"), when("module.heading")),
22372
+ brandLogo,
22373
+ navigation,
22374
+ stack({
22375
+ gap: "sm",
22376
+ className: "rb-w-full"
22377
+ }, [legalNavigation], when("module.kind", { equals: "legal-navigation" })),
22378
+ address,
22379
+ contact,
22380
+ hours,
22381
+ socials,
22382
+ stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
22383
+ stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
22384
+ ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
22385
+ const footerMainRegion = stack({
22386
+ className: { $bind: { from: "region.className" } },
22387
+ "data-footer-region": { $bind: { from: "region.kind" } }
22388
+ }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
22389
+ const footerBottomRegion = stack({ className: { $bind: {
22390
+ from: "$root.theme.footer",
22391
+ transforms: [{ id: "layout.footerBottomBarContainerClass" }],
22392
+ fallback: "rb-w-full"
22393
+ } } }, [stack({
22362
22394
  className: { $bind: {
22363
22395
  from: "$root.theme.footer",
22364
- transforms: [{ id: "layout.footerRootClass" }],
22365
- fallback: "rb-w-full rb-border-t transition-theme"
22396
+ transforms: [{ id: "layout.footerBottomBarClass" }],
22397
+ fallback: "rb-w-full rb-border-t rb-px-6 rb-py-6 rb-text-center"
22366
22398
  } },
22367
22399
  style: { $bind: {
22368
22400
  from: "$root.theme.footer",
22369
- transforms: [{ id: "layout.footerRootStyle" }],
22370
- fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
22371
- } }
22372
- }, [
22373
- simpleFooterLayout,
22374
- columnsFooterLayout,
22375
- splitFooterLayout,
22376
- stack({
22377
- className: { $bind: {
22378
- from: "$root.theme.footer",
22379
- transforms: [{ id: "layout.footerBottomBarClass" }],
22380
- fallback: "rb-w-full rb-border-t rb-py-5"
22381
- } },
22382
- style: { $bind: {
22383
- from: "$root.theme.footer",
22384
- transforms: [{ id: "layout.footerBottomBarStyle" }]
22385
- } }
22386
- }, [stack({ className: { $bind: {
22387
- from: "$root.theme.footer",
22388
- transforms: [{ id: "layout.footerBottomBarContainerClass" }],
22389
- fallback: "rb-container"
22390
- } } }, [...bottomBarTextLayout()])], when("$root.theme.footer.bottomBar.enabled", { equals: true }))
22391
- ]);
22401
+ transforms: [{ id: "layout.footerBottomBarStyle" }]
22402
+ } },
22403
+ "data-footer-region": "bottom"
22404
+ }, [footerGroup])], when("region.kind", { equals: "bottom" }), repeat("content.footerRuntime.regions", "region"));
22392
22405
  const siteFooterBlockDefinition = { manifest: createBlockManifest({
22393
22406
  id: "block.site-footer",
22394
22407
  title: "Site Footer",
22395
22408
  category: "layout",
22396
- fragments: [{
22397
- fragment: footerBottomTextFragment,
22398
- fieldPriority: 0
22399
- }],
22400
22409
  skipSectionStyles: true,
22401
- additionalFields: [{
22402
- id: "showBusinessAddress",
22403
- type: "boolean",
22404
- label: "Add business address to site footer?",
22405
- required: false,
22406
- defaultValue: false,
22407
- ui: { intent: "content" }
22408
- }],
22409
- layout: footerLayout,
22410
- description: "Site-wide footer with navigation links and optional columns.",
22410
+ layout: section({
22411
+ background: "background",
22412
+ className: { $bind: {
22413
+ from: "$root.theme.footer",
22414
+ transforms: [{ id: "layout.footerRootClass" }],
22415
+ fallback: "rb-w-full rb-border-t transition-theme"
22416
+ } },
22417
+ style: { $bind: {
22418
+ from: "$root.theme.footer",
22419
+ transforms: [{ id: "layout.footerRootStyle" }],
22420
+ fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
22421
+ } },
22422
+ "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
22423
+ }, [footerMainRegion, footerBottomRegion]),
22424
+ description: "Site-wide composed footer with canonical shared details.",
22411
22425
  styleTokens: { spacing: "md" },
22412
22426
  paletteHidden: true
22413
22427
  }) };
@@ -22885,7 +22899,7 @@ const repeatedItemsNode = repeaterFragmentLayout({
22885
22899
  id: "boxStyles.all",
22886
22900
  options: {
22887
22901
  axis: "all",
22888
- baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-hidden rb-border"
22902
+ baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
22889
22903
  }
22890
22904
  }]
22891
22905
  },
@@ -34671,16 +34685,17 @@ const backgroundTransforms = [
34671
34685
  run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
34672
34686
  },
34673
34687
  {
34674
- id: "background.resolveAllowOverflow",
34688
+ id: "background.resolveFrameClassName",
34675
34689
  kind: "formatter",
34676
- summary: "Resolve allowOverflow from background config (explicit overflow or scaled image)",
34677
- run: (value) => {
34678
- if (!value || typeof value !== "object") return false;
34690
+ summary: "Resolve clipping on a decorative background frame without clipping foreground content",
34691
+ run: (value, options) => {
34692
+ const baseClass = options?.baseClass?.trim() ?? "";
34693
+ if (!value || typeof value !== "object") return `${baseClass} rb-overflow-hidden`.trim();
34679
34694
  const input = value;
34680
- if (input.overflow === true) return true;
34695
+ if (input.overflow === true) return `${baseClass} rb-overflow-visible`.trim();
34681
34696
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
34682
34697
  const scale = isString(input.scale) ? input.scale.trim() : isNumber(input.scale) ? String(input.scale) : null;
34683
- return Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0);
34698
+ return `${baseClass} ${Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0) ? "rb-overflow-visible" : "rb-overflow-hidden"}`.trim();
34684
34699
  }
34685
34700
  },
34686
34701
  {