@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) {
@@ -5067,104 +5067,153 @@ const showtimePill = defineButtonPersonality({
5067
5067
  }
5068
5068
  });
5069
5069
  //#endregion
5070
- //#region ../theme-core/src/buttons/personalities/index.ts
5071
- const buttonPersonalities = [
5072
- defineButtonPersonality({
5073
- id: "soft-pill",
5074
- name: "Soft Pill",
5075
- description: "Rounded pills with a gentle lift on hover. Quietly modern.",
5076
- tags: {
5077
- tone: "classic",
5078
- energy: "calm",
5079
- motion: "subtle",
5080
- era: "organic"
5070
+ //#region ../theme-core/src/buttons/personalities/soft-pill.ts
5071
+ /**
5072
+ * Soft Pill — rounded-full pill buttons with a hover lift. The default for
5073
+ * Calm Studio and Modern Wellness; reads as quietly modern and welcoming.
5074
+ */
5075
+ const softPill = defineButtonPersonality({
5076
+ id: "soft-pill",
5077
+ name: "Soft Pill",
5078
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
5079
+ tags: {
5080
+ tone: "classic",
5081
+ energy: "calm",
5082
+ motion: "subtle",
5083
+ era: "organic"
5084
+ },
5085
+ buttonSystem: {
5086
+ global: {
5087
+ cornerStyle: "pill",
5088
+ shadow: "low",
5089
+ textTransform: "none",
5090
+ fontWeight: 500,
5091
+ borderWidth: 2,
5092
+ hoverTransform: "lift",
5093
+ hoverColor: "none"
5081
5094
  },
5082
- buttonSystem: {
5083
- global: {
5084
- cornerStyle: "pill",
5085
- shadow: "low",
5086
- textTransform: "none",
5087
- fontWeight: 500,
5088
- borderWidth: 2,
5089
- hoverTransform: "lift",
5090
- hoverColor: "none"
5091
- },
5092
- variants: [
5093
- {
5094
- id: "primary",
5095
- name: "Primary",
5096
- enabled: true,
5097
- priority: 1,
5098
- background: {
5099
- type: "solid",
5100
- colorToken: "primary"
5101
- },
5102
- textColorToken: "primaryForeground",
5103
- borderRadius: "rounded-full",
5104
- shadow: {
5105
- elevation: "low",
5106
- softness: "soft",
5107
- position: "bottom"
5108
- },
5109
- effects: {
5110
- hover: [{
5111
- effectId: "lift",
5112
- options: { translateY: "-1px" }
5113
- }],
5114
- active: [{
5115
- effectId: "scale-down",
5116
- options: { scale: "0.98" }
5117
- }]
5118
- }
5119
- },
5120
- {
5121
- id: "secondary",
5122
- name: "Secondary",
5123
- enabled: true,
5124
- priority: 2,
5125
- background: { type: "transparent" },
5126
- textColorToken: "primary",
5127
- borderRadius: "rounded-full",
5128
- border: {
5129
- widthClass: "border-2",
5130
- colorToken: "primary"
5131
- },
5132
- effects: { hover: [{
5133
- effectId: "background-on-hover",
5134
- options: { colorToken: "surface" }
5135
- }] }
5095
+ variants: [
5096
+ {
5097
+ id: "primary",
5098
+ name: "Primary",
5099
+ enabled: true,
5100
+ priority: 1,
5101
+ background: {
5102
+ type: "solid",
5103
+ colorToken: "primary"
5136
5104
  },
5137
- {
5138
- id: "outline",
5139
- name: "Outline",
5140
- enabled: true,
5141
- priority: 3,
5142
- background: { type: "transparent" },
5143
- textColorToken: "text",
5144
- borderRadius: "rounded-full",
5145
- border: {
5146
- widthClass: "border",
5147
- colorToken: "border"
5148
- },
5149
- effects: { hover: [{
5150
- effectId: "background-on-hover",
5151
- options: { colorToken: "surface" }
5152
- }] }
5105
+ textColorToken: "primaryForeground",
5106
+ borderRadius: "rounded-full",
5107
+ shadow: {
5108
+ elevation: "low",
5109
+ softness: "soft",
5110
+ position: "bottom"
5153
5111
  },
5154
- {
5155
- id: "ghost",
5156
- name: "Ghost",
5157
- enabled: true,
5158
- priority: 3,
5159
- background: { type: "transparent" },
5160
- textColorToken: "text",
5161
- borderRadius: "rounded-full",
5162
- effects: { hover: [{
5163
- effectId: "background-on-hover",
5164
- options: { colorToken: "surface" }
5165
- }] }
5112
+ effects: {
5113
+ hover: [{
5114
+ effectId: "lift",
5115
+ options: { translateY: "-1px" }
5116
+ }],
5117
+ active: [{
5118
+ effectId: "scale-down",
5119
+ options: { scale: "0.98" }
5120
+ }]
5166
5121
  }
5167
- ]
5122
+ },
5123
+ {
5124
+ id: "secondary",
5125
+ name: "Secondary",
5126
+ enabled: true,
5127
+ priority: 2,
5128
+ background: { type: "transparent" },
5129
+ textColorToken: "primary",
5130
+ borderRadius: "rounded-full",
5131
+ border: {
5132
+ widthClass: "border-2",
5133
+ colorToken: "primary"
5134
+ },
5135
+ effects: { hover: [{
5136
+ effectId: "background-on-hover",
5137
+ options: { colorToken: "surface" }
5138
+ }] }
5139
+ },
5140
+ {
5141
+ id: "outline",
5142
+ name: "Outline",
5143
+ enabled: true,
5144
+ priority: 3,
5145
+ background: { type: "transparent" },
5146
+ textColorToken: "text",
5147
+ borderRadius: "rounded-full",
5148
+ border: {
5149
+ widthClass: "border",
5150
+ colorToken: "border"
5151
+ },
5152
+ effects: { hover: [{
5153
+ effectId: "background-on-hover",
5154
+ options: { colorToken: "surface" }
5155
+ }] }
5156
+ },
5157
+ {
5158
+ id: "ghost",
5159
+ name: "Ghost",
5160
+ enabled: true,
5161
+ priority: 3,
5162
+ background: { type: "transparent" },
5163
+ textColorToken: "text",
5164
+ borderRadius: "rounded-full",
5165
+ effects: { hover: [{
5166
+ effectId: "background-on-hover",
5167
+ options: { colorToken: "surface" }
5168
+ }] }
5169
+ }
5170
+ ]
5171
+ }
5172
+ });
5173
+ //#endregion
5174
+ //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
5175
+ const solidSecondary = {
5176
+ id: "secondary",
5177
+ name: "Secondary",
5178
+ enabled: true,
5179
+ priority: 2,
5180
+ background: {
5181
+ type: "solid",
5182
+ colorToken: "secondary"
5183
+ },
5184
+ textColorToken: "onSecondary",
5185
+ borderRadius: "rounded-full",
5186
+ shadow: {
5187
+ elevation: "none",
5188
+ softness: null,
5189
+ position: "bottom"
5190
+ },
5191
+ effects: {
5192
+ hover: [{
5193
+ effectId: "background-on-hover-alpha",
5194
+ options: {
5195
+ colorToken: "secondary",
5196
+ opacity: 88
5197
+ }
5198
+ }],
5199
+ active: [{
5200
+ effectId: "scale-down",
5201
+ options: { scale: "0.98" }
5202
+ }]
5203
+ }
5204
+ };
5205
+ //#endregion
5206
+ //#region ../theme-core/src/buttons/personalities/index.ts
5207
+ const buttonPersonalities = [
5208
+ softPill,
5209
+ defineButtonPersonality({
5210
+ id: "two-tone-pill",
5211
+ name: "Two-tone Pill",
5212
+ description: "Rounded pills with distinct solid primary and secondary brand colours.",
5213
+ tags: softPill.tags,
5214
+ buttonSystem: {
5215
+ ...softPill.buttonSystem,
5216
+ variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
5168
5217
  }
5169
5218
  }),
5170
5219
  earthPill,
@@ -6698,6 +6747,7 @@ const navFontWeight = z$1.enum([
6698
6747
  "bold"
6699
6748
  ]);
6700
6749
  const headerMaxWidth = z$1.enum(["container", "full"]);
6750
+ const headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
6701
6751
  const headerContainerSchema = z$1.object({
6702
6752
  rounded: z$1.enum([
6703
6753
  "none",
@@ -6842,6 +6892,7 @@ const headerSchema = z$1.object({
6842
6892
  positioning: headerPositioning,
6843
6893
  shrinkOnScroll: z$1.boolean(),
6844
6894
  maxWidth: headerMaxWidth,
6895
+ barFrame: headerBarFrame.optional(),
6845
6896
  logoOverride: mediaSchema$1.nullable().optional(),
6846
6897
  background: headerBackgroundSchema.default({
6847
6898
  type: "color",
@@ -6851,6 +6902,7 @@ const headerSchema = z$1.object({
6851
6902
  navStyle: headerNavStyle,
6852
6903
  navColor: themeColorTokenSchema.nullable().optional(),
6853
6904
  navWeight: navFontWeight.default("medium"),
6905
+ navFontRole: z$1.enum(["body", "heading"]).optional(),
6854
6906
  navTypography: z$1.enum(["body", "heading"]).optional(),
6855
6907
  navTextSize: navLinkStyleSchema.shape.textSize,
6856
6908
  navPlacement: z$1.enum(["end", "center"]).optional(),
@@ -6866,7 +6918,21 @@ const headerSchema = z$1.object({
6866
6918
  ctaTreatment: headerCtaTreatmentSchema.optional(),
6867
6919
  ctaVariant: z$1.string().min(1).optional(),
6868
6920
  dropdownStyle: dropdownStyleSchema
6869
- });
6921
+ }).transform(normaliseHeaderNavFontRole);
6922
+ /**
6923
+ * Normalises the legacy `navTypography` font-role alias into the canonical
6924
+ * `navFontRole` field so persisted themes migrate at the parse boundary without
6925
+ * a data migration. `navFontRole` always wins when both are present; the legacy
6926
+ * field is dropped so we never carry a dual write forward.
6927
+ */
6928
+ function normaliseHeaderNavFontRole(header) {
6929
+ if (header.navTypography === void 0) return header;
6930
+ const { navTypography, ...rest } = header;
6931
+ return header.navFontRole === void 0 ? {
6932
+ ...rest,
6933
+ navFontRole: navTypography
6934
+ } : rest;
6935
+ }
6870
6936
  const footerVariant = z$1.enum([
6871
6937
  "simple",
6872
6938
  "columns",
@@ -8672,7 +8738,7 @@ const overlayLogoAccommodations = [
8672
8738
  * optional nested styling fields that would otherwise leak from another Look.
8673
8739
  */
8674
8740
  function baseHeader(theme) {
8675
- 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;
8741
+ 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;
8676
8742
  return {
8677
8743
  ...header,
8678
8744
  navContainer: {
@@ -8821,6 +8887,17 @@ const headerStyleCatalog = defineExactCatalog()([
8821
8887
  navTypography: "brand-caps",
8822
8888
  moods: ["expressive"]
8823
8889
  },
8890
+ {
8891
+ id: asHeaderStyleId("brand-capsule"),
8892
+ label: "Brand Capsule",
8893
+ description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
8894
+ supportedLayoutIds: supportedLayouts(["classic"]),
8895
+ navInteraction: "pill-background",
8896
+ surface: "brand-solid",
8897
+ defaultDepth: "shadow",
8898
+ navTypography: "quiet-caps",
8899
+ moods: ["expressive", "professional"]
8900
+ },
8824
8901
  {
8825
8902
  id: asHeaderStyleId("serif-line"),
8826
8903
  label: "Serif Line",
@@ -8914,6 +8991,7 @@ const headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
8914
8991
  "brand-bar",
8915
8992
  "brand-underline",
8916
8993
  "brand-pill",
8994
+ "brand-capsule",
8917
8995
  "serif-line",
8918
8996
  "flat-tabs"
8919
8997
  ])],
@@ -8951,6 +9029,11 @@ headerStyleRepairChain([
8951
9029
  "brand-pill",
8952
9030
  "brand-bar",
8953
9031
  "minimal"
9032
+ ]), headerStyleRepairChain([
9033
+ "brand-capsule",
9034
+ "brand-pill",
9035
+ "brand-bar",
9036
+ "minimal"
8954
9037
  ]), headerStyleRepairChain([
8955
9038
  "pill-nav",
8956
9039
  "soft-bar",
@@ -11188,6 +11271,7 @@ const curatedSiteStyles = [
11188
11271
  ],
11189
11272
  buttonPersonalityChoices: [
11190
11273
  buttonChoice("soft-pill"),
11274
+ buttonChoice("two-tone-pill"),
11191
11275
  buttonChoice("pebble"),
11192
11276
  buttonChoice("editorial-link"),
11193
11277
  buttonChoice("brushed-wash")
@@ -12367,6 +12451,7 @@ const curatedSiteStyles = [
12367
12451
  ],
12368
12452
  buttonPersonalityChoices: [
12369
12453
  buttonChoice("quiet-arrow"),
12454
+ buttonChoice("two-tone-pill"),
12370
12455
  buttonChoice("flat-ink"),
12371
12456
  buttonChoice("editorial-link")
12372
12457
  ],
@@ -13254,7 +13339,7 @@ const ALLOWED_TRANSFORM_IDS = [
13254
13339
  "media.fromUrl",
13255
13340
  "background.resolveStyle",
13256
13341
  "background.resolveColorsStyle",
13257
- "background.resolveAllowOverflow",
13342
+ "background.resolveFrameClassName",
13258
13343
  "background.resolveImageStyle",
13259
13344
  "background.resolveImageClassName",
13260
13345
  "background.resolveOverlayStyle",
@@ -14921,6 +15006,7 @@ function devValidate(node) {
14921
15006
  }
14922
15007
  //#endregion
14923
15008
  //#region ../blocks/src/system/node/fragments/backgroundLayer.ts
15009
+ 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";
14924
15010
  /**
14925
15011
  * Creates background layer nodes for rendering backgrounds from field data.
14926
15012
  *
@@ -14986,6 +15072,34 @@ function backgroundLayer(path, options = {}) {
14986
15072
  ];
14987
15073
  }
14988
15074
  /**
15075
+ * Wrap decorative background layers in their own clipping frame.
15076
+ *
15077
+ * Foreground content remains outside this frame, so editor outlines, focus
15078
+ * rings, and floating controls are never clipped by a visual background.
15079
+ * Backgrounds that explicitly opt into overflow keep that behavior within
15080
+ * the decorative layer rather than changing the content root.
15081
+ */
15082
+ function backgroundFrame(path, options = {}) {
15083
+ const { leadingNodes = [], ...layerOptions } = options;
15084
+ const framedLayerOptions = {
15085
+ ...layerOptions,
15086
+ styleClassName: layerOptions.styleClassName ?? "background-style rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none",
15087
+ imageClassName: layerOptions.imageClassName ?? "rb-absolute rb-z-0",
15088
+ overlayClassName: layerOptions.overlayClassName ?? "background-overlay rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none"
15089
+ };
15090
+ return el("div", {
15091
+ className: { $bind: {
15092
+ from: path,
15093
+ transforms: [{
15094
+ id: "background.resolveFrameClassName",
15095
+ options: { baseClass: BACKGROUND_FRAME_BASE_CLASS }
15096
+ }],
15097
+ fallback: `${BACKGROUND_FRAME_BASE_CLASS} rb-overflow-hidden`
15098
+ } },
15099
+ style: { borderRadius: "inherit" }
15100
+ }, [...leadingNodes, ...backgroundLayer(path, framedLayerOptions)]);
15101
+ }
15102
+ /**
14989
15103
  * Creates a media node for rendering background image/video media with conditional rendering.
14990
15104
  *
14991
15105
  * This helper creates a media element that:
@@ -15147,8 +15261,8 @@ function sectionContainer(children, opts) {
15147
15261
  * - content
15148
15262
  */
15149
15263
  function styledContainer(config) {
15150
- 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;
15151
- const backgroundNodes = backgroundLayer(`${bindFrom}.background`, { imageClassName });
15264
+ const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-visible", imageClassName = "rb-absolute rb-z-0", constrainWidth = true } = config;
15265
+ const backgroundNode = backgroundFrame(`${bindFrom}.background`, { imageClassName });
15152
15266
  const childrenArray = Array.isArray(children) ? children : [children];
15153
15267
  const { className: _ignoredClassName, style: _ignoredStyle, ...safeRootProps } = rootProps ?? {};
15154
15268
  return el(rootType, {
@@ -15171,7 +15285,7 @@ function styledContainer(config) {
15171
15285
  }],
15172
15286
  fallback: constrainWidth ? `${baseClassName} rb-container` : baseClassName
15173
15287
  } }
15174
- }, [...backgroundNodes, ...childrenArray]);
15288
+ }, [backgroundNode, ...childrenArray]);
15175
15289
  }
15176
15290
  //#endregion
15177
15291
  //#region ../blocks/src/system/spacing.ts
@@ -15304,7 +15418,7 @@ const DEFAULT_SECTION_SPACING = "medium";
15304
15418
  * - Creating a section wrapper with background theme
15305
15419
  * - Adding background color/gradient/image layers
15306
15420
  * - Binding className to section styles with transform
15307
- * - Binding allowOverflow for background positioning
15421
+ * - Keeping foreground overflow visible while decorative backgrounds clip independently
15308
15422
  * - Wrapping content children
15309
15423
  *
15310
15424
  * Use this helper to eliminate 25+ lines of boilerplate section setup code.
@@ -15340,8 +15454,8 @@ const DEFAULT_SECTION_SPACING = "medium";
15340
15454
  * });
15341
15455
  */
15342
15456
  function styledSection(config) {
15343
- 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;
15344
- const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
15457
+ 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;
15458
+ const renderedBackgroundNode = backgroundFrame(`${bindFrom}.background`, {
15345
15459
  imageClassName,
15346
15460
  fallbackToken: background,
15347
15461
  omitImageLayer: !renderBackgroundImage,
@@ -15364,13 +15478,8 @@ function styledSection(config) {
15364
15478
  fullWidthPath
15365
15479
  }
15366
15480
  }]
15367
- } },
15368
- allowOverflow: allowOverflow ? true : { $bind: {
15369
- from: `${bindFrom}.background`,
15370
- transforms: [{ id: "background.resolveAllowOverflow" }],
15371
- fallback: false
15372
15481
  } }
15373
- }, [...renderedBackgroundNodes, ...childrenArray]);
15482
+ }, [renderedBackgroundNode, ...childrenArray]);
15374
15483
  }
15375
15484
  //#endregion
15376
15485
  //#region ../blocks/src/system/node/fragments/ctaButton.ts
@@ -16222,9 +16331,12 @@ function responsiveTwoColumn({ image, text, ratioFrom, imagePositionFrom, gapCla
16222
16331
  //#endregion
16223
16332
  //#region ../blocks/src/system/node/fragments/styledCard.ts
16224
16333
  function styledCard(children, opts, ...mods) {
16225
- const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-hidden rb-border";
16226
- 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" });
16227
- const backgroundNodes = backgroundLayer(opts.backgroundFrom);
16334
+ const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-visible rb-border";
16335
+ const defaultBackgroundLayer = el("div", {
16336
+ className: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none rb-bg-surface",
16337
+ style: { borderRadius: "inherit" }
16338
+ });
16339
+ const backgroundNode = backgroundFrame(opts.backgroundFrom);
16228
16340
  const style = {
16229
16341
  ...opts.style ?? {},
16230
16342
  borderColor: { $bind: {
@@ -16251,7 +16363,7 @@ function styledCard(children, opts, ...mods) {
16251
16363
  ...style ? { style } : {}
16252
16364
  }, [
16253
16365
  defaultBackgroundLayer,
16254
- ...backgroundNodes,
16366
+ backgroundNode,
16255
16367
  ...children
16256
16368
  ], ...mods);
16257
16369
  }
@@ -17260,7 +17372,7 @@ function buildTestimonialCard(...mods) {
17260
17372
  }, 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())])], {
17261
17373
  stylesFrom: "content._cardStyles",
17262
17374
  backgroundFrom: "content._cardStyles.background",
17263
- baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-hidden rb-p-8"
17375
+ baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-visible rb-p-8"
17264
17376
  }, ...mods);
17265
17377
  }
17266
17378
  /**
@@ -17732,39 +17844,6 @@ const formEmbedFragment = defineFragment({
17732
17844
  }
17733
17845
  });
17734
17846
  //#endregion
17735
- //#region ../blocks/src/system/fragments/library/footerBottomText.ts
17736
- const footerBottomTextFragment = defineFragment({
17737
- id: "footerBottomText",
17738
- title: "Footer Text",
17739
- description: "Rich text content for the main footer body and optional bottom bar.",
17740
- fields: [{
17741
- id: "bodyText",
17742
- type: "richText",
17743
- label: "Body text",
17744
- description: "Appears in the main footer area.",
17745
- ui: { variant: "limited" }
17746
- }, {
17747
- id: "bottomText",
17748
- type: "richText",
17749
- label: "Bottom bar text",
17750
- description: "Appears in the optional footer bottom bar.",
17751
- ui: { variant: "limited" }
17752
- }],
17753
- layout: [richText({
17754
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
17755
- style: textColorStyle("text/80")
17756
- }, when("bodyText"), bind("bodyText", { transforms: [{
17757
- id: "content.interpolateRichTextTokens",
17758
- options: { tokens: ["year", "site_name"] }
17759
- }] })), richText({
17760
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
17761
- style: textColorStyle("text/80")
17762
- }, when("bottomText"), bind("bottomText", { transforms: [{
17763
- id: "content.interpolateRichTextTokens",
17764
- options: { tokens: ["year", "site_name"] }
17765
- }] }))]
17766
- });
17767
- //#endregion
17768
17847
  //#region ../blocks/src/system/fragments/library/singleButton.ts
17769
17848
  const singleButtonFragment = defineFragment({
17770
17849
  id: "singleButton",
@@ -17937,7 +18016,7 @@ function createFaqAccordionLayout(options = {}) {
17937
18016
  options: {
17938
18017
  axis: "all",
17939
18018
  includeSpacing: false,
17940
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
18019
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-visible"
17941
18020
  }
17942
18021
  }]
17943
18022
  },
@@ -19061,7 +19140,6 @@ function splitLayoutWith(children) {
19061
19140
  }
19062
19141
  }),
19063
19142
  renderBackgroundImage: false,
19064
- allowOverflow: true,
19065
19143
  baseClass: ""
19066
19144
  });
19067
19145
  }
@@ -19689,7 +19767,7 @@ function postCard(children, ...mods) {
19689
19767
  return styledCard(children, {
19690
19768
  stylesFrom: "content._cardStyles",
19691
19769
  backgroundFrom: "content._cardStyles.background",
19692
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-flex-col rb-h-full"
19770
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-flex rb-flex-col rb-h-full"
19693
19771
  }, ...mods);
19694
19772
  }
19695
19773
  const gridPostCard = postCard([postImageLink("rb-h-48 rb-w-full rb-object-cover rb-transition-transform rb-hover-scale-105", {
@@ -19725,7 +19803,7 @@ const stackPostCard = styledCard([inline({
19725
19803
  ])])], {
19726
19804
  stylesFrom: "content._cardStyles",
19727
19805
  backgroundFrom: "content._cardStyles.background",
19728
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border"
19806
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border"
19729
19807
  }, repeat("data.posts", "post"));
19730
19808
  const emptyState$2 = {
19731
19809
  ...styledCard([text({
@@ -19734,7 +19812,7 @@ const emptyState$2 = {
19734
19812
  }, bind("content.emptyMessage", { fallback: "No posts published yet." }))], {
19735
19813
  stylesFrom: "content._cardStyles",
19736
19814
  backgroundFrom: "content._cardStyles.background",
19737
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-border-dashed rb-p-8 rb-text-center"
19815
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-border-dashed rb-p-8 rb-text-center"
19738
19816
  }),
19739
19817
  $when: {
19740
19818
  when: { from: "data.posts[0]" },
@@ -19744,7 +19822,7 @@ const emptyState$2 = {
19744
19822
  function blogListingShell(children) {
19745
19823
  return styledSection({
19746
19824
  children: styledContainer({
19747
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden",
19825
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
19748
19826
  children
19749
19827
  }),
19750
19828
  baseClass: ""
@@ -20156,7 +20234,7 @@ const copyLayout = fragmentLayoutNode$1(formCopyFragment.layout);
20156
20234
  const formSurface = styledContainer({
20157
20235
  bindFrom: "_containerStyles",
20158
20236
  constrainWidth: false,
20159
- baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
20237
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
20160
20238
  children: fragmentLayoutNode$1(formEmbedFragment.layout)
20161
20239
  });
20162
20240
  function createFormLayout(variant) {
@@ -21373,6 +21451,7 @@ const headerRootClassTransform = {
21373
21451
  ];
21374
21452
  const variant = header?.variant;
21375
21453
  if (variant && VALID_VARIANTS.includes(variant)) classes.push(`header-variant-${variant}`);
21454
+ if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
21376
21455
  return joinClasses(classes);
21377
21456
  }
21378
21457
  };
@@ -21886,7 +21965,7 @@ function desktopOnlyDisplay(display) {
21886
21965
  }
21887
21966
  //#endregion
21888
21967
  //#region ../blocks/src/system/blocks/site-header.ts
21889
- const whenTransformed$1 = (from, transformId, equals = true) => (node) => ({
21968
+ const whenTransformed = (from, transformId, equals = true) => (node) => ({
21890
21969
  ...node,
21891
21970
  $when: {
21892
21971
  when: {
@@ -21914,7 +21993,7 @@ const logoRow = link({
21914
21993
  text({
21915
21994
  as: "strong",
21916
21995
  className: "header-logo-text rb-truncate"
21917
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21996
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21918
21997
  ]);
21919
21998
  const centeredLogoRow = link({
21920
21999
  href: "/",
@@ -21934,7 +22013,7 @@ const centeredLogoRow = link({
21934
22013
  text({
21935
22014
  as: "strong",
21936
22015
  className: "header-logo-text"
21937
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22016
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21938
22017
  ]);
21939
22018
  const createNavRow = (className, align = "end") => navRow({
21940
22019
  className: `${className} header-nav-row`,
@@ -22066,7 +22145,7 @@ const classicLayout = inline({
22066
22145
  logoRow,
22067
22146
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
22068
22147
  headerCta
22069
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "inline"));
22148
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
22070
22149
  const classicCenteredNavLayout = inline({
22071
22150
  className: bindProp("$root.theme.header.maxWidth", {
22072
22151
  transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
@@ -22077,7 +22156,7 @@ const classicCenteredNavLayout = inline({
22077
22156
  logoRow,
22078
22157
  createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
22079
22158
  headerCta
22080
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "centered"));
22159
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
22081
22160
  const centeredLayout = stack({
22082
22161
  gap: "md",
22083
22162
  align: "center",
@@ -22140,7 +22219,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
22140
22219
  transforms: pipe(tx("layout.headerSectionBackground")),
22141
22220
  fallback: "background"
22142
22221
  }),
22143
- allowOverflow: true,
22144
22222
  className: bindProp("$root.theme.header", {
22145
22223
  transforms: pipe(tx("layout.headerRootClass")),
22146
22224
  fallback: "header-root rb-z-40 rb-w-full transition-theme"
@@ -22190,218 +22268,154 @@ const footerNavGroupsLayout = stack({
22190
22268
  linkRequired: true,
22191
22269
  target: { $bind: { from: "entry.target" } },
22192
22270
  rel: { $bind: { from: "entry.rel" } }
22193
- }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], when("footerMenu.groups"));
22271
+ }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
22194
22272
  //#endregion
22195
22273
  //#region ../blocks/src/system/blocks/site-footer.ts
22196
- const footerTextLayout = () => materializeFragment({ fragment: footerBottomTextFragment }).layout;
22197
- const whenTransformed = (from, transformId, equals = true) => (node) => ({
22198
- ...node,
22199
- $when: {
22200
- when: {
22201
- from,
22202
- transforms: [{ id: transformId }]
22203
- },
22204
- equals
22205
- }
22206
- });
22207
- const bottomBarTextLayout = () => {
22208
- const bottomTextNode = footerTextLayout()[1];
22209
- return bottomTextNode ? [bottomTextNode] : [];
22210
- };
22211
- const bodyTextLayout = () => {
22212
- const bodyTextNode = footerTextLayout()[0];
22213
- return bodyTextNode ? [bodyTextNode] : [];
22214
- };
22215
- const businessAddressLayout = () => [text({
22216
- as: "p",
22217
- className: "rb-caption rb-opacity-80"
22218
- }, bind("site.businessAddress.displayAddress"), when("content.showBusinessAddress", { equals: true }))];
22219
- const inlineBottomTextLayout = () => {
22220
- const bottomTextNode = footerTextLayout()[1];
22221
- if (!bottomTextNode) return [];
22222
- return [when("$root.theme.footer.bottomBar.enabled", {
22223
- equals: true,
22224
- not: true
22225
- })(bottomTextNode)];
22226
- };
22227
- const simpleFooterLayout = stack({
22228
- gap: "md",
22229
- align: "start",
22230
- className: { $bind: {
22231
- from: "$root.theme.footer",
22232
- transforms: [{ id: "layout.footerSimpleRootClass" }],
22233
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-items-start rb-gap-4 rb-py-10 rb-text-left"
22234
- } }
22235
- }, [
22236
- link({
22237
- href: "/",
22238
- className: { $bind: {
22239
- from: "$root.theme.footer.logo",
22240
- transforms: [{
22241
- id: "layout.footerLogoClass",
22242
- options: { requireExplicitShow: true }
22243
- }],
22244
- fallback: "rb-hidden"
22245
- } }
22246
- }, [
22247
- media({ className: { $bind: {
22248
- from: "$root.theme.footer.logo",
22249
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22250
- fallback: "rb-w-auto"
22251
- } } }, when("content.logo"), bind("content.logo")),
22252
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
22253
- from: "$root.theme.footer.logo",
22254
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22255
- fallback: "rb-w-auto"
22256
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
22257
- text({
22258
- as: "strong",
22259
- className: "footer-logo-text rb-nav-text"
22260
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22261
- ]),
22262
- footerNav({
22263
- collectionPath: "footerMenu.items",
22264
- mode: "flatten",
22265
- className: { $bind: {
22266
- from: "$root.theme.footer.navLayout",
22267
- transforms: [{ id: "layout.footerSimpleNavClass" }],
22268
- fallback: "footer-nav rb-flex rb-flex-wrap rb-justify-start rb-gap-x-6 rb-gap-y-3"
22269
- } },
22270
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
22271
- }),
22272
- ...bodyTextLayout(),
22273
- ...businessAddressLayout(),
22274
- ...inlineBottomTextLayout()
22275
- ], when("$root.theme.footer.variant", { equals: "simple" }));
22276
- const columnsFooterLayout = stack({
22277
- gap: "xl",
22278
- align: "start",
22274
+ const brandLogo = link({
22275
+ href: "/",
22279
22276
  className: { $bind: {
22280
- from: "$root.theme.footer.maxWidth",
22277
+ from: "$root.theme.footer.logo",
22281
22278
  transforms: [{
22282
- id: "layout.maxWidthClass",
22283
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
22279
+ id: "layout.footerLogoClass",
22280
+ options: { base: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline" }
22284
22281
  }],
22285
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
22282
+ fallback: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline"
22286
22283
  } }
22287
- }, [
22288
- footerNavGroupsLayout,
22289
- inline({ className: "rb-flex rb-w-full rb-flex-wrap rb-items-center rb-justify-between rb-gap-4" }, [text({
22290
- as: "strong",
22291
- className: "rb-block rb-nav-text",
22292
- style: textColorStyle("text")
22293
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" })), footerNav({
22294
- collectionPath: "footerMenu.items",
22295
- mode: "links-only",
22296
- className: "rb-flex rb-flex-wrap rb-justify-end rb-gap-x-6 rb-gap-y-3",
22297
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
22298
- })]),
22299
- ...bodyTextLayout(),
22300
- ...businessAddressLayout(),
22301
- ...inlineBottomTextLayout()
22302
- ], when("$root.theme.footer.variant", { equals: "columns" }));
22303
- const splitFooterLayout = stack({
22304
- gap: "xl",
22305
- align: "start",
22284
+ }, [media({ className: { $bind: {
22285
+ from: "$root.theme.footer.logo",
22286
+ transforms: [{
22287
+ id: "layout.footerLogoMediaClass",
22288
+ options: { base: "rb-h-10 rb-w-auto" }
22289
+ }],
22290
+ fallback: "rb-h-10 rb-w-auto"
22291
+ } } }, when("module.showLogo", { equals: true }), when("content.logo"), bind("content.logo")), text({
22292
+ as: "strong",
22293
+ className: "footer-logo-text rb-nav-text"
22294
+ }, when("module.showTitle", { equals: true }), bind("site.title", { fallback: "Your Site" }))], when("module.kind", { equals: "brand" }));
22295
+ const navigation = stack({
22296
+ gap: "md",
22297
+ className: "rb-w-full"
22298
+ }, [footerNavGroupsLayout, footerNav({
22299
+ collectionPath: "footerMenu.items",
22300
+ mode: "links-only",
22306
22301
  className: { $bind: {
22307
- from: "$root.theme.footer.maxWidth",
22308
- transforms: [{
22309
- id: "layout.maxWidthClass",
22310
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
22311
- }],
22312
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
22313
- } }
22302
+ from: "module.navigationClassName",
22303
+ fallback: "footer-nav rb-flex rb-flex-wrap rb-gap-x-6 rb-gap-y-3"
22304
+ } },
22305
+ linkClassName: "footer-nav-link rb-nav-text transition-theme-standard"
22306
+ })], when("module.kind", { equals: "navigation" }));
22307
+ const legalNavigation = footerNav({
22308
+ collectionPath: "legalFooterMenu.items",
22309
+ mode: "links-only",
22310
+ className: "rb-flex rb-flex-wrap rb-gap-x-4 rb-gap-y-2",
22311
+ linkClassName: "footer-nav-link rb-caption transition-theme-standard"
22312
+ });
22313
+ const address = text({
22314
+ as: "address",
22315
+ className: "rb-not-italic rb-opacity-80"
22316
+ }, when("module.kind", { equals: "business-address" }), bind("module.address"));
22317
+ const contact = stack({
22318
+ gap: "sm",
22319
+ className: "rb-items-start"
22320
+ }, [link({
22321
+ href: { $bind: { from: "contactLink.href" } },
22322
+ className: "rb-nav-text rb-break-words transition-theme-standard"
22323
+ }, [text({ as: "span" }, bind("contactLink.label"))], repeat("module.contactLinks", "contactLink"))], when("module.kind", { equals: "contact" }));
22324
+ const hours = stack({
22325
+ gap: "sm",
22326
+ className: "rb-w-full"
22327
+ }, [inline({ className: "rb-flex rb-w-full rb-justify-between rb-gap-4" }, [text({
22328
+ as: "span",
22329
+ className: "rb-label"
22330
+ }, bind("hoursDay.weekday")), text({
22331
+ as: "span",
22332
+ className: "rb-caption rb-opacity-80"
22333
+ }, bind("hoursDay.hours"))], repeat("module.openingHours", "hoursDay")), text({
22334
+ as: "p",
22335
+ className: "rb-caption rb-opacity-70"
22336
+ }, bind("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
22337
+ const socials = inline({ className: "rb-flex rb-flex-wrap rb-gap-x-5 rb-gap-y-3" }, [link({
22338
+ href: { $bind: { from: "social.href" } },
22339
+ target: "_blank",
22340
+ rel: "noreferrer noopener",
22341
+ "aria-label": { $bind: { from: "social.label" } },
22342
+ className: "rb-nav-text transition-theme-standard"
22343
+ }, [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" }));
22344
+ const authoredCopy = richText({
22345
+ className: "rb-prose rb-prose-sm rb-max-w-none",
22346
+ style: textColorStyle("text/80")
22347
+ }, when("module.content"), bind("module.content", { transforms: [{
22348
+ id: "content.interpolateRichTextTokens",
22349
+ options: { tokens: ["year", "site_name"] }
22350
+ }] }));
22351
+ const footerGroup = stack({
22352
+ gap: "md",
22353
+ align: "stretch",
22354
+ className: "rb-min-w-0",
22355
+ "data-footer-group": { $bind: { from: "group.kind" } }
22356
+ }, [stack({
22357
+ gap: "md",
22358
+ align: "start",
22359
+ "data-preview-footer-module-id": { $bind: { from: "module.id" } }
22314
22360
  }, [
22315
- inline({ className: { $bind: {
22316
- from: "$root.theme.footer.logo",
22317
- transforms: [{ id: "layout.footerSplitMainClass" }],
22318
- 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"
22319
- } } }, [stack({}, [footerNav({
22320
- collectionPath: "footerMenu.items",
22321
- mode: "flatten",
22322
- className: { $bind: {
22323
- from: "$root.theme.footer.navLayout",
22324
- transforms: [{ id: "layout.footerSplitNavSingleClass" }],
22325
- fallback: "rb-w-full rb-space-y-3 rb-text-left"
22326
- } },
22327
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-whitespace-nowrap rb-nav-text transition-theme-standard"
22328
- })]), link({
22329
- href: "/",
22330
- className: { $bind: {
22331
- from: "$root.theme.footer.logo",
22332
- transforms: [{ id: "layout.footerLogoClass" }],
22333
- 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"
22334
- } }
22335
- }, [
22336
- media({ className: { $bind: {
22337
- from: "$root.theme.footer.logo",
22338
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22339
- fallback: "rb-w-auto"
22340
- } } }, when("content.logo"), bind("content.logo")),
22341
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
22342
- from: "$root.theme.footer.logo",
22343
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22344
- fallback: "rb-w-auto"
22345
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
22346
- text({
22347
- as: "strong",
22348
- className: "footer-logo-text rb-nav-text"
22349
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22350
- ])]),
22351
- ...businessAddressLayout(),
22352
- ...inlineBottomTextLayout()
22353
- ], when("$root.theme.footer.variant", { equals: "split" }));
22354
- const footerLayout = section({
22355
- background: "background",
22361
+ text({
22362
+ as: "h2",
22363
+ className: "rb-label",
22364
+ style: textColorStyle("text/70")
22365
+ }, bind("module.heading"), when("module.heading")),
22366
+ brandLogo,
22367
+ navigation,
22368
+ stack({
22369
+ gap: "sm",
22370
+ className: "rb-w-full"
22371
+ }, [legalNavigation], when("module.kind", { equals: "legal-navigation" })),
22372
+ address,
22373
+ contact,
22374
+ hours,
22375
+ socials,
22376
+ stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
22377
+ stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
22378
+ ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
22379
+ const footerMainRegion = stack({
22380
+ className: { $bind: { from: "region.className" } },
22381
+ "data-footer-region": { $bind: { from: "region.kind" } }
22382
+ }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
22383
+ const footerBottomRegion = stack({ className: { $bind: {
22384
+ from: "$root.theme.footer",
22385
+ transforms: [{ id: "layout.footerBottomBarContainerClass" }],
22386
+ fallback: "rb-w-full"
22387
+ } } }, [stack({
22356
22388
  className: { $bind: {
22357
22389
  from: "$root.theme.footer",
22358
- transforms: [{ id: "layout.footerRootClass" }],
22359
- fallback: "rb-w-full rb-border-t transition-theme"
22390
+ transforms: [{ id: "layout.footerBottomBarClass" }],
22391
+ fallback: "rb-w-full rb-border-t rb-px-6 rb-py-6 rb-text-center"
22360
22392
  } },
22361
22393
  style: { $bind: {
22362
22394
  from: "$root.theme.footer",
22363
- transforms: [{ id: "layout.footerRootStyle" }],
22364
- fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
22365
- } }
22366
- }, [
22367
- simpleFooterLayout,
22368
- columnsFooterLayout,
22369
- splitFooterLayout,
22370
- stack({
22371
- className: { $bind: {
22372
- from: "$root.theme.footer",
22373
- transforms: [{ id: "layout.footerBottomBarClass" }],
22374
- fallback: "rb-w-full rb-border-t rb-py-5"
22375
- } },
22376
- style: { $bind: {
22377
- from: "$root.theme.footer",
22378
- transforms: [{ id: "layout.footerBottomBarStyle" }]
22379
- } }
22380
- }, [stack({ className: { $bind: {
22381
- from: "$root.theme.footer",
22382
- transforms: [{ id: "layout.footerBottomBarContainerClass" }],
22383
- fallback: "rb-container"
22384
- } } }, [...bottomBarTextLayout()])], when("$root.theme.footer.bottomBar.enabled", { equals: true }))
22385
- ]);
22395
+ transforms: [{ id: "layout.footerBottomBarStyle" }]
22396
+ } },
22397
+ "data-footer-region": "bottom"
22398
+ }, [footerGroup])], when("region.kind", { equals: "bottom" }), repeat("content.footerRuntime.regions", "region"));
22386
22399
  const siteFooterBlockDefinition = { manifest: createBlockManifest({
22387
22400
  id: "block.site-footer",
22388
22401
  title: "Site Footer",
22389
22402
  category: "layout",
22390
- fragments: [{
22391
- fragment: footerBottomTextFragment,
22392
- fieldPriority: 0
22393
- }],
22394
22403
  skipSectionStyles: true,
22395
- additionalFields: [{
22396
- id: "showBusinessAddress",
22397
- type: "boolean",
22398
- label: "Add business address to site footer?",
22399
- required: false,
22400
- defaultValue: false,
22401
- ui: { intent: "content" }
22402
- }],
22403
- layout: footerLayout,
22404
- description: "Site-wide footer with navigation links and optional columns.",
22404
+ layout: section({
22405
+ background: "background",
22406
+ className: { $bind: {
22407
+ from: "$root.theme.footer",
22408
+ transforms: [{ id: "layout.footerRootClass" }],
22409
+ fallback: "rb-w-full rb-border-t transition-theme"
22410
+ } },
22411
+ style: { $bind: {
22412
+ from: "$root.theme.footer",
22413
+ transforms: [{ id: "layout.footerRootStyle" }],
22414
+ fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
22415
+ } },
22416
+ "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
22417
+ }, [footerMainRegion, footerBottomRegion]),
22418
+ description: "Site-wide composed footer with canonical shared details.",
22405
22419
  styleTokens: { spacing: "md" },
22406
22420
  paletteHidden: true
22407
22421
  }) };
@@ -22879,7 +22893,7 @@ const repeatedItemsNode = repeaterFragmentLayout({
22879
22893
  id: "boxStyles.all",
22880
22894
  options: {
22881
22895
  axis: "all",
22882
- baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-hidden rb-border"
22896
+ baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
22883
22897
  }
22884
22898
  }]
22885
22899
  },
@@ -34441,16 +34455,17 @@ const backgroundTransforms = [
34441
34455
  run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
34442
34456
  },
34443
34457
  {
34444
- id: "background.resolveAllowOverflow",
34458
+ id: "background.resolveFrameClassName",
34445
34459
  kind: "formatter",
34446
- summary: "Resolve allowOverflow from background config (explicit overflow or scaled image)",
34447
- run: (value) => {
34448
- if (!value || typeof value !== "object") return false;
34460
+ summary: "Resolve clipping on a decorative background frame without clipping foreground content",
34461
+ run: (value, options) => {
34462
+ const baseClass = options?.baseClass?.trim() ?? "";
34463
+ if (!value || typeof value !== "object") return `${baseClass} rb-overflow-hidden`.trim();
34449
34464
  const input = value;
34450
- if (input.overflow === true) return true;
34465
+ if (input.overflow === true) return `${baseClass} rb-overflow-visible`.trim();
34451
34466
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
34452
34467
  const scale = isString(input.scale) ? input.scale.trim() : isNumber(input.scale) ? String(input.scale) : null;
34453
- return Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0);
34468
+ return `${baseClass} ${Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0) ? "rb-overflow-visible" : "rb-overflow-hidden"}`.trim();
34454
34469
  }
34455
34470
  },
34456
34471
  {
@@ -36074,8 +36089,14 @@ const navigationMenuConfigSchema = z$1.object({
36074
36089
  name: z$1.string().min(1, "Name is required"),
36075
36090
  isPrimary: z$1.boolean().optional(),
36076
36091
  isFooter: z$1.boolean().optional(),
36092
+ footerRole: z$1.enum(["main", "legal-policy"]).nullable().optional(),
36077
36093
  items: z$1.array(navigationItemConfigSchema)
36078
36094
  }).superRefine((menu, ctx) => {
36095
+ if (menu.footerRole !== void 0 && menu.isFooter !== void 0 && menu.isFooter !== (menu.footerRole === "main")) ctx.addIssue({
36096
+ code: "custom",
36097
+ message: "footerRole and isFooter disagree",
36098
+ path: ["footerRole"]
36099
+ });
36079
36100
  const portalStats = collectPortalLinkStats(menu.items);
36080
36101
  if (portalStats.count > 1) ctx.addIssue({
36081
36102
  code: z$1.ZodIssueCode.custom,