@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
@@ -2,7 +2,6 @@
2
2
  import { use, useEffect, useState } from "react";
3
3
  import z, { z as z$1 } from "zod";
4
4
  import "react/jsx-runtime";
5
- //#region ../api/src/apiEndpointTypes.ts
6
5
  function blockedDemoMutationPolicy(classification, publicMessage) {
7
6
  if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
8
7
  return {
@@ -30,6 +29,7 @@ const TAG_TEMPLATES = {
30
29
  siteRouteOutcomes: "riverbank:site:{siteId}:route-outcomes",
31
30
  routeById: "riverbank:route:{routeId}",
32
31
  pageById: "riverbank:page:{pageId}",
32
+ pageSurfaceById: "riverbank:page-surface:{pageSurfaceId}",
33
33
  workflowRunById: "riverbank:workflow-run:{runId}",
34
34
  siteForms: "riverbank:site:{siteId}:forms",
35
35
  formById: "riverbank:form:{formId}",
@@ -53,7 +53,7 @@ const TAG_TEMPLATES = {
53
53
  blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
54
54
  blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
55
55
  blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
56
- 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;
56
+ 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;
57
57
  //#endregion
58
58
  //#region ../core/src/result.ts
59
59
  function ok(value) {
@@ -5073,104 +5073,153 @@ const showtimePill = defineButtonPersonality({
5073
5073
  }
5074
5074
  });
5075
5075
  //#endregion
5076
- //#region ../theme-core/src/buttons/personalities/index.ts
5077
- const buttonPersonalities = [
5078
- defineButtonPersonality({
5079
- id: "soft-pill",
5080
- name: "Soft Pill",
5081
- description: "Rounded pills with a gentle lift on hover. Quietly modern.",
5082
- tags: {
5083
- tone: "classic",
5084
- energy: "calm",
5085
- motion: "subtle",
5086
- era: "organic"
5076
+ //#region ../theme-core/src/buttons/personalities/soft-pill.ts
5077
+ /**
5078
+ * Soft Pill — rounded-full pill buttons with a hover lift. The default for
5079
+ * Calm Studio and Modern Wellness; reads as quietly modern and welcoming.
5080
+ */
5081
+ const softPill = defineButtonPersonality({
5082
+ id: "soft-pill",
5083
+ name: "Soft Pill",
5084
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
5085
+ tags: {
5086
+ tone: "classic",
5087
+ energy: "calm",
5088
+ motion: "subtle",
5089
+ era: "organic"
5090
+ },
5091
+ buttonSystem: {
5092
+ global: {
5093
+ cornerStyle: "pill",
5094
+ shadow: "low",
5095
+ textTransform: "none",
5096
+ fontWeight: 500,
5097
+ borderWidth: 2,
5098
+ hoverTransform: "lift",
5099
+ hoverColor: "none"
5087
5100
  },
5088
- buttonSystem: {
5089
- global: {
5090
- cornerStyle: "pill",
5091
- shadow: "low",
5092
- textTransform: "none",
5093
- fontWeight: 500,
5094
- borderWidth: 2,
5095
- hoverTransform: "lift",
5096
- hoverColor: "none"
5097
- },
5098
- variants: [
5099
- {
5100
- id: "primary",
5101
- name: "Primary",
5102
- enabled: true,
5103
- priority: 1,
5104
- background: {
5105
- type: "solid",
5106
- colorToken: "primary"
5107
- },
5108
- textColorToken: "primaryForeground",
5109
- borderRadius: "rounded-full",
5110
- shadow: {
5111
- elevation: "low",
5112
- softness: "soft",
5113
- position: "bottom"
5114
- },
5115
- effects: {
5116
- hover: [{
5117
- effectId: "lift",
5118
- options: { translateY: "-1px" }
5119
- }],
5120
- active: [{
5121
- effectId: "scale-down",
5122
- options: { scale: "0.98" }
5123
- }]
5124
- }
5125
- },
5126
- {
5127
- id: "secondary",
5128
- name: "Secondary",
5129
- enabled: true,
5130
- priority: 2,
5131
- background: { type: "transparent" },
5132
- textColorToken: "primary",
5133
- borderRadius: "rounded-full",
5134
- border: {
5135
- widthClass: "border-2",
5136
- colorToken: "primary"
5137
- },
5138
- effects: { hover: [{
5139
- effectId: "background-on-hover",
5140
- options: { colorToken: "surface" }
5141
- }] }
5101
+ variants: [
5102
+ {
5103
+ id: "primary",
5104
+ name: "Primary",
5105
+ enabled: true,
5106
+ priority: 1,
5107
+ background: {
5108
+ type: "solid",
5109
+ colorToken: "primary"
5142
5110
  },
5143
- {
5144
- id: "outline",
5145
- name: "Outline",
5146
- enabled: true,
5147
- priority: 3,
5148
- background: { type: "transparent" },
5149
- textColorToken: "text",
5150
- borderRadius: "rounded-full",
5151
- border: {
5152
- widthClass: "border",
5153
- colorToken: "border"
5154
- },
5155
- effects: { hover: [{
5156
- effectId: "background-on-hover",
5157
- options: { colorToken: "surface" }
5158
- }] }
5111
+ textColorToken: "primaryForeground",
5112
+ borderRadius: "rounded-full",
5113
+ shadow: {
5114
+ elevation: "low",
5115
+ softness: "soft",
5116
+ position: "bottom"
5159
5117
  },
5160
- {
5161
- id: "ghost",
5162
- name: "Ghost",
5163
- enabled: true,
5164
- priority: 3,
5165
- background: { type: "transparent" },
5166
- textColorToken: "text",
5167
- borderRadius: "rounded-full",
5168
- effects: { hover: [{
5169
- effectId: "background-on-hover",
5170
- options: { colorToken: "surface" }
5171
- }] }
5118
+ effects: {
5119
+ hover: [{
5120
+ effectId: "lift",
5121
+ options: { translateY: "-1px" }
5122
+ }],
5123
+ active: [{
5124
+ effectId: "scale-down",
5125
+ options: { scale: "0.98" }
5126
+ }]
5172
5127
  }
5173
- ]
5128
+ },
5129
+ {
5130
+ id: "secondary",
5131
+ name: "Secondary",
5132
+ enabled: true,
5133
+ priority: 2,
5134
+ background: { type: "transparent" },
5135
+ textColorToken: "primary",
5136
+ borderRadius: "rounded-full",
5137
+ border: {
5138
+ widthClass: "border-2",
5139
+ colorToken: "primary"
5140
+ },
5141
+ effects: { hover: [{
5142
+ effectId: "background-on-hover",
5143
+ options: { colorToken: "surface" }
5144
+ }] }
5145
+ },
5146
+ {
5147
+ id: "outline",
5148
+ name: "Outline",
5149
+ enabled: true,
5150
+ priority: 3,
5151
+ background: { type: "transparent" },
5152
+ textColorToken: "text",
5153
+ borderRadius: "rounded-full",
5154
+ border: {
5155
+ widthClass: "border",
5156
+ colorToken: "border"
5157
+ },
5158
+ effects: { hover: [{
5159
+ effectId: "background-on-hover",
5160
+ options: { colorToken: "surface" }
5161
+ }] }
5162
+ },
5163
+ {
5164
+ id: "ghost",
5165
+ name: "Ghost",
5166
+ enabled: true,
5167
+ priority: 3,
5168
+ background: { type: "transparent" },
5169
+ textColorToken: "text",
5170
+ borderRadius: "rounded-full",
5171
+ effects: { hover: [{
5172
+ effectId: "background-on-hover",
5173
+ options: { colorToken: "surface" }
5174
+ }] }
5175
+ }
5176
+ ]
5177
+ }
5178
+ });
5179
+ //#endregion
5180
+ //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
5181
+ const solidSecondary = {
5182
+ id: "secondary",
5183
+ name: "Secondary",
5184
+ enabled: true,
5185
+ priority: 2,
5186
+ background: {
5187
+ type: "solid",
5188
+ colorToken: "secondary"
5189
+ },
5190
+ textColorToken: "onSecondary",
5191
+ borderRadius: "rounded-full",
5192
+ shadow: {
5193
+ elevation: "none",
5194
+ softness: null,
5195
+ position: "bottom"
5196
+ },
5197
+ effects: {
5198
+ hover: [{
5199
+ effectId: "background-on-hover-alpha",
5200
+ options: {
5201
+ colorToken: "secondary",
5202
+ opacity: 88
5203
+ }
5204
+ }],
5205
+ active: [{
5206
+ effectId: "scale-down",
5207
+ options: { scale: "0.98" }
5208
+ }]
5209
+ }
5210
+ };
5211
+ //#endregion
5212
+ //#region ../theme-core/src/buttons/personalities/index.ts
5213
+ const buttonPersonalities = [
5214
+ softPill,
5215
+ defineButtonPersonality({
5216
+ id: "two-tone-pill",
5217
+ name: "Two-tone Pill",
5218
+ description: "Rounded pills with distinct solid primary and secondary brand colours.",
5219
+ tags: softPill.tags,
5220
+ buttonSystem: {
5221
+ ...softPill.buttonSystem,
5222
+ variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
5174
5223
  }
5175
5224
  }),
5176
5225
  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
@@ -16214,9 +16323,12 @@ function responsiveTwoColumn({ image, text, ratioFrom, imagePositionFrom, gapCla
16214
16323
  //#endregion
16215
16324
  //#region ../blocks/src/system/node/fragments/styledCard.ts
16216
16325
  function styledCard(children, opts, ...mods) {
16217
- const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-hidden rb-border";
16218
- 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" });
16219
- const backgroundNodes = backgroundLayer(opts.backgroundFrom);
16326
+ const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-visible rb-border";
16327
+ const defaultBackgroundLayer = el("div", {
16328
+ className: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none rb-bg-surface",
16329
+ style: { borderRadius: "inherit" }
16330
+ });
16331
+ const backgroundNode = backgroundFrame(opts.backgroundFrom);
16220
16332
  const style = {
16221
16333
  ...opts.style ?? {},
16222
16334
  borderColor: { $bind: {
@@ -16243,7 +16355,7 @@ function styledCard(children, opts, ...mods) {
16243
16355
  ...style ? { style } : {}
16244
16356
  }, [
16245
16357
  defaultBackgroundLayer,
16246
- ...backgroundNodes,
16358
+ backgroundNode,
16247
16359
  ...children
16248
16360
  ], ...mods);
16249
16361
  }
@@ -17252,7 +17364,7 @@ function buildTestimonialCard(...mods) {
17252
17364
  }, 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())])], {
17253
17365
  stylesFrom: "content._cardStyles",
17254
17366
  backgroundFrom: "content._cardStyles.background",
17255
- baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-hidden rb-p-8"
17367
+ baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-visible rb-p-8"
17256
17368
  }, ...mods);
17257
17369
  }
17258
17370
  /**
@@ -17724,39 +17836,6 @@ const formEmbedFragment = defineFragment({
17724
17836
  }
17725
17837
  });
17726
17838
  //#endregion
17727
- //#region ../blocks/src/system/fragments/library/footerBottomText.ts
17728
- const footerBottomTextFragment = defineFragment({
17729
- id: "footerBottomText",
17730
- title: "Footer Text",
17731
- description: "Rich text content for the main footer body and optional bottom bar.",
17732
- fields: [{
17733
- id: "bodyText",
17734
- type: "richText",
17735
- label: "Body text",
17736
- description: "Appears in the main footer area.",
17737
- ui: { variant: "limited" }
17738
- }, {
17739
- id: "bottomText",
17740
- type: "richText",
17741
- label: "Bottom bar text",
17742
- description: "Appears in the optional footer bottom bar.",
17743
- ui: { variant: "limited" }
17744
- }],
17745
- layout: [richText({
17746
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
17747
- style: textColorStyle("text/80")
17748
- }, when("bodyText"), bind("bodyText", { transforms: [{
17749
- id: "content.interpolateRichTextTokens",
17750
- options: { tokens: ["year", "site_name"] }
17751
- }] })), richText({
17752
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
17753
- style: textColorStyle("text/80")
17754
- }, when("bottomText"), bind("bottomText", { transforms: [{
17755
- id: "content.interpolateRichTextTokens",
17756
- options: { tokens: ["year", "site_name"] }
17757
- }] }))]
17758
- });
17759
- //#endregion
17760
17839
  //#region ../blocks/src/system/fragments/library/singleButton.ts
17761
17840
  const singleButtonFragment = defineFragment({
17762
17841
  id: "singleButton",
@@ -17929,7 +18008,7 @@ function createFaqAccordionLayout(options = {}) {
17929
18008
  options: {
17930
18009
  axis: "all",
17931
18010
  includeSpacing: false,
17932
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
18011
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-visible"
17933
18012
  }
17934
18013
  }]
17935
18014
  },
@@ -19053,7 +19132,6 @@ function splitLayoutWith(children) {
19053
19132
  }
19054
19133
  }),
19055
19134
  renderBackgroundImage: false,
19056
- allowOverflow: true,
19057
19135
  baseClass: ""
19058
19136
  });
19059
19137
  }
@@ -19681,7 +19759,7 @@ function postCard(children, ...mods) {
19681
19759
  return styledCard(children, {
19682
19760
  stylesFrom: "content._cardStyles",
19683
19761
  backgroundFrom: "content._cardStyles.background",
19684
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-flex-col rb-h-full"
19762
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-flex rb-flex-col rb-h-full"
19685
19763
  }, ...mods);
19686
19764
  }
19687
19765
  const gridPostCard = postCard([postImageLink("rb-h-48 rb-w-full rb-object-cover rb-transition-transform rb-hover-scale-105", {
@@ -19717,7 +19795,7 @@ const stackPostCard = styledCard([inline({
19717
19795
  ])])], {
19718
19796
  stylesFrom: "content._cardStyles",
19719
19797
  backgroundFrom: "content._cardStyles.background",
19720
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border"
19798
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border"
19721
19799
  }, repeat("data.posts", "post"));
19722
19800
  const emptyState$2 = {
19723
19801
  ...styledCard([text({
@@ -19726,7 +19804,7 @@ const emptyState$2 = {
19726
19804
  }, bind("content.emptyMessage", { fallback: "No posts published yet." }))], {
19727
19805
  stylesFrom: "content._cardStyles",
19728
19806
  backgroundFrom: "content._cardStyles.background",
19729
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-border-dashed rb-p-8 rb-text-center"
19807
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-border-dashed rb-p-8 rb-text-center"
19730
19808
  }),
19731
19809
  $when: {
19732
19810
  when: { from: "data.posts[0]" },
@@ -19736,7 +19814,7 @@ const emptyState$2 = {
19736
19814
  function blogListingShell(children) {
19737
19815
  return styledSection({
19738
19816
  children: styledContainer({
19739
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden",
19817
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
19740
19818
  children
19741
19819
  }),
19742
19820
  baseClass: ""
@@ -20148,7 +20226,7 @@ const copyLayout = fragmentLayoutNode$1(formCopyFragment.layout);
20148
20226
  const formSurface = styledContainer({
20149
20227
  bindFrom: "_containerStyles",
20150
20228
  constrainWidth: false,
20151
- baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
20229
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
20152
20230
  children: fragmentLayoutNode$1(formEmbedFragment.layout)
20153
20231
  });
20154
20232
  function createFormLayout(variant) {
@@ -21365,6 +21443,7 @@ const headerRootClassTransform = {
21365
21443
  ];
21366
21444
  const variant = header?.variant;
21367
21445
  if (variant && VALID_VARIANTS.includes(variant)) classes.push(`header-variant-${variant}`);
21446
+ if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
21368
21447
  return joinClasses(classes);
21369
21448
  }
21370
21449
  };
@@ -21888,7 +21967,7 @@ function desktopOnlyDisplay(display) {
21888
21967
  }
21889
21968
  //#endregion
21890
21969
  //#region ../blocks/src/system/blocks/site-header.ts
21891
- const whenTransformed$1 = (from, transformId, equals = true) => (node) => ({
21970
+ const whenTransformed = (from, transformId, equals = true) => (node) => ({
21892
21971
  ...node,
21893
21972
  $when: {
21894
21973
  when: {
@@ -21916,7 +21995,7 @@ const logoRow = link({
21916
21995
  text({
21917
21996
  as: "strong",
21918
21997
  className: "header-logo-text rb-truncate"
21919
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21998
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21920
21999
  ]);
21921
22000
  const centeredLogoRow = link({
21922
22001
  href: "/",
@@ -21936,7 +22015,7 @@ const centeredLogoRow = link({
21936
22015
  text({
21937
22016
  as: "strong",
21938
22017
  className: "header-logo-text"
21939
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22018
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
21940
22019
  ]);
21941
22020
  const createNavRow = (className, align = "end") => navRow({
21942
22021
  className: `${className} header-nav-row`,
@@ -22068,7 +22147,7 @@ const classicLayout = inline({
22068
22147
  logoRow,
22069
22148
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
22070
22149
  headerCta
22071
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "inline"));
22150
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
22072
22151
  const classicCenteredNavLayout = inline({
22073
22152
  className: bindProp("$root.theme.header.maxWidth", {
22074
22153
  transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
@@ -22079,7 +22158,7 @@ const classicCenteredNavLayout = inline({
22079
22158
  logoRow,
22080
22159
  createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
22081
22160
  headerCta
22082
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "centered"));
22161
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
22083
22162
  const centeredLayout = stack({
22084
22163
  gap: "md",
22085
22164
  align: "center",
@@ -22142,7 +22221,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
22142
22221
  transforms: pipe(tx("layout.headerSectionBackground")),
22143
22222
  fallback: "background"
22144
22223
  }),
22145
- allowOverflow: true,
22146
22224
  className: bindProp("$root.theme.header", {
22147
22225
  transforms: pipe(tx("layout.headerRootClass")),
22148
22226
  fallback: "header-root rb-z-40 rb-w-full transition-theme"
@@ -22192,218 +22270,154 @@ const footerNavGroupsLayout = stack({
22192
22270
  linkRequired: true,
22193
22271
  target: { $bind: { from: "entry.target" } },
22194
22272
  rel: { $bind: { from: "entry.rel" } }
22195
- }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], when("footerMenu.groups"));
22273
+ }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
22196
22274
  //#endregion
22197
22275
  //#region ../blocks/src/system/blocks/site-footer.ts
22198
- const footerTextLayout = () => materializeFragment({ fragment: footerBottomTextFragment }).layout;
22199
- const whenTransformed = (from, transformId, equals = true) => (node) => ({
22200
- ...node,
22201
- $when: {
22202
- when: {
22203
- from,
22204
- transforms: [{ id: transformId }]
22205
- },
22206
- equals
22207
- }
22208
- });
22209
- const bottomBarTextLayout = () => {
22210
- const bottomTextNode = footerTextLayout()[1];
22211
- return bottomTextNode ? [bottomTextNode] : [];
22212
- };
22213
- const bodyTextLayout = () => {
22214
- const bodyTextNode = footerTextLayout()[0];
22215
- return bodyTextNode ? [bodyTextNode] : [];
22216
- };
22217
- const businessAddressLayout = () => [text({
22218
- as: "p",
22219
- className: "rb-caption rb-opacity-80"
22220
- }, bind("site.businessAddress.displayAddress"), when("content.showBusinessAddress", { equals: true }))];
22221
- const inlineBottomTextLayout = () => {
22222
- const bottomTextNode = footerTextLayout()[1];
22223
- if (!bottomTextNode) return [];
22224
- return [when("$root.theme.footer.bottomBar.enabled", {
22225
- equals: true,
22226
- not: true
22227
- })(bottomTextNode)];
22228
- };
22229
- const simpleFooterLayout = stack({
22230
- gap: "md",
22231
- align: "start",
22232
- className: { $bind: {
22233
- from: "$root.theme.footer",
22234
- transforms: [{ id: "layout.footerSimpleRootClass" }],
22235
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-items-start rb-gap-4 rb-py-10 rb-text-left"
22236
- } }
22237
- }, [
22238
- link({
22239
- href: "/",
22240
- className: { $bind: {
22241
- from: "$root.theme.footer.logo",
22242
- transforms: [{
22243
- id: "layout.footerLogoClass",
22244
- options: { requireExplicitShow: true }
22245
- }],
22246
- fallback: "rb-hidden"
22247
- } }
22248
- }, [
22249
- media({ className: { $bind: {
22250
- from: "$root.theme.footer.logo",
22251
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22252
- fallback: "rb-w-auto"
22253
- } } }, when("content.logo"), bind("content.logo")),
22254
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
22255
- from: "$root.theme.footer.logo",
22256
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22257
- fallback: "rb-w-auto"
22258
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
22259
- text({
22260
- as: "strong",
22261
- className: "footer-logo-text rb-nav-text"
22262
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22263
- ]),
22264
- footerNav({
22265
- collectionPath: "footerMenu.items",
22266
- mode: "flatten",
22267
- className: { $bind: {
22268
- from: "$root.theme.footer.navLayout",
22269
- transforms: [{ id: "layout.footerSimpleNavClass" }],
22270
- fallback: "footer-nav rb-flex rb-flex-wrap rb-justify-start rb-gap-x-6 rb-gap-y-3"
22271
- } },
22272
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
22273
- }),
22274
- ...bodyTextLayout(),
22275
- ...businessAddressLayout(),
22276
- ...inlineBottomTextLayout()
22277
- ], when("$root.theme.footer.variant", { equals: "simple" }));
22278
- const columnsFooterLayout = stack({
22279
- gap: "xl",
22280
- align: "start",
22276
+ const brandLogo = link({
22277
+ href: "/",
22281
22278
  className: { $bind: {
22282
- from: "$root.theme.footer.maxWidth",
22279
+ from: "$root.theme.footer.logo",
22283
22280
  transforms: [{
22284
- id: "layout.maxWidthClass",
22285
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
22281
+ id: "layout.footerLogoClass",
22282
+ options: { base: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline" }
22286
22283
  }],
22287
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
22284
+ fallback: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline"
22288
22285
  } }
22289
- }, [
22290
- footerNavGroupsLayout,
22291
- inline({ className: "rb-flex rb-w-full rb-flex-wrap rb-items-center rb-justify-between rb-gap-4" }, [text({
22292
- as: "strong",
22293
- className: "rb-block rb-nav-text",
22294
- style: textColorStyle("text")
22295
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" })), footerNav({
22296
- collectionPath: "footerMenu.items",
22297
- mode: "links-only",
22298
- className: "rb-flex rb-flex-wrap rb-justify-end rb-gap-x-6 rb-gap-y-3",
22299
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
22300
- })]),
22301
- ...bodyTextLayout(),
22302
- ...businessAddressLayout(),
22303
- ...inlineBottomTextLayout()
22304
- ], when("$root.theme.footer.variant", { equals: "columns" }));
22305
- const splitFooterLayout = stack({
22306
- gap: "xl",
22307
- align: "start",
22286
+ }, [media({ className: { $bind: {
22287
+ from: "$root.theme.footer.logo",
22288
+ transforms: [{
22289
+ id: "layout.footerLogoMediaClass",
22290
+ options: { base: "rb-h-10 rb-w-auto" }
22291
+ }],
22292
+ fallback: "rb-h-10 rb-w-auto"
22293
+ } } }, when("module.showLogo", { equals: true }), when("content.logo"), bind("content.logo")), text({
22294
+ as: "strong",
22295
+ className: "footer-logo-text rb-nav-text"
22296
+ }, when("module.showTitle", { equals: true }), bind("site.title", { fallback: "Your Site" }))], when("module.kind", { equals: "brand" }));
22297
+ const navigation = stack({
22298
+ gap: "md",
22299
+ className: "rb-w-full"
22300
+ }, [footerNavGroupsLayout, footerNav({
22301
+ collectionPath: "footerMenu.items",
22302
+ mode: "links-only",
22308
22303
  className: { $bind: {
22309
- from: "$root.theme.footer.maxWidth",
22310
- transforms: [{
22311
- id: "layout.maxWidthClass",
22312
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
22313
- }],
22314
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
22315
- } }
22304
+ from: "module.navigationClassName",
22305
+ fallback: "footer-nav rb-flex rb-flex-wrap rb-gap-x-6 rb-gap-y-3"
22306
+ } },
22307
+ linkClassName: "footer-nav-link rb-nav-text transition-theme-standard"
22308
+ })], when("module.kind", { equals: "navigation" }));
22309
+ const legalNavigation = footerNav({
22310
+ collectionPath: "legalFooterMenu.items",
22311
+ mode: "links-only",
22312
+ className: "rb-flex rb-flex-wrap rb-gap-x-4 rb-gap-y-2",
22313
+ linkClassName: "footer-nav-link rb-caption transition-theme-standard"
22314
+ });
22315
+ const address = text({
22316
+ as: "address",
22317
+ className: "rb-not-italic rb-opacity-80"
22318
+ }, when("module.kind", { equals: "business-address" }), bind("module.address"));
22319
+ const contact = stack({
22320
+ gap: "sm",
22321
+ className: "rb-items-start"
22322
+ }, [link({
22323
+ href: { $bind: { from: "contactLink.href" } },
22324
+ className: "rb-nav-text rb-break-words transition-theme-standard"
22325
+ }, [text({ as: "span" }, bind("contactLink.label"))], repeat("module.contactLinks", "contactLink"))], when("module.kind", { equals: "contact" }));
22326
+ const hours = stack({
22327
+ gap: "sm",
22328
+ className: "rb-w-full"
22329
+ }, [inline({ className: "rb-flex rb-w-full rb-justify-between rb-gap-4" }, [text({
22330
+ as: "span",
22331
+ className: "rb-label"
22332
+ }, bind("hoursDay.weekday")), text({
22333
+ as: "span",
22334
+ className: "rb-caption rb-opacity-80"
22335
+ }, bind("hoursDay.hours"))], repeat("module.openingHours", "hoursDay")), text({
22336
+ as: "p",
22337
+ className: "rb-caption rb-opacity-70"
22338
+ }, bind("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
22339
+ const socials = inline({ className: "rb-flex rb-flex-wrap rb-gap-x-5 rb-gap-y-3" }, [link({
22340
+ href: { $bind: { from: "social.href" } },
22341
+ target: "_blank",
22342
+ rel: "noreferrer noopener",
22343
+ "aria-label": { $bind: { from: "social.label" } },
22344
+ className: "rb-nav-text transition-theme-standard"
22345
+ }, [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" }));
22346
+ const authoredCopy = richText({
22347
+ className: "rb-prose rb-prose-sm rb-max-w-none",
22348
+ style: textColorStyle("text/80")
22349
+ }, when("module.content"), bind("module.content", { transforms: [{
22350
+ id: "content.interpolateRichTextTokens",
22351
+ options: { tokens: ["year", "site_name"] }
22352
+ }] }));
22353
+ const footerGroup = stack({
22354
+ gap: "md",
22355
+ align: "stretch",
22356
+ className: "rb-min-w-0",
22357
+ "data-footer-group": { $bind: { from: "group.kind" } }
22358
+ }, [stack({
22359
+ gap: "md",
22360
+ align: "start",
22361
+ "data-preview-footer-module-id": { $bind: { from: "module.id" } }
22316
22362
  }, [
22317
- inline({ className: { $bind: {
22318
- from: "$root.theme.footer.logo",
22319
- transforms: [{ id: "layout.footerSplitMainClass" }],
22320
- 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"
22321
- } } }, [stack({}, [footerNav({
22322
- collectionPath: "footerMenu.items",
22323
- mode: "flatten",
22324
- className: { $bind: {
22325
- from: "$root.theme.footer.navLayout",
22326
- transforms: [{ id: "layout.footerSplitNavSingleClass" }],
22327
- fallback: "rb-w-full rb-space-y-3 rb-text-left"
22328
- } },
22329
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-whitespace-nowrap rb-nav-text transition-theme-standard"
22330
- })]), link({
22331
- href: "/",
22332
- className: { $bind: {
22333
- from: "$root.theme.footer.logo",
22334
- transforms: [{ id: "layout.footerLogoClass" }],
22335
- 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"
22336
- } }
22337
- }, [
22338
- media({ className: { $bind: {
22339
- from: "$root.theme.footer.logo",
22340
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22341
- fallback: "rb-w-auto"
22342
- } } }, when("content.logo"), bind("content.logo")),
22343
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
22344
- from: "$root.theme.footer.logo",
22345
- transforms: [{ id: "layout.footerLogoMediaClass" }],
22346
- fallback: "rb-w-auto"
22347
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
22348
- text({
22349
- as: "strong",
22350
- className: "footer-logo-text rb-nav-text"
22351
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
22352
- ])]),
22353
- ...businessAddressLayout(),
22354
- ...inlineBottomTextLayout()
22355
- ], when("$root.theme.footer.variant", { equals: "split" }));
22356
- const footerLayout = section({
22357
- background: "background",
22363
+ text({
22364
+ as: "h2",
22365
+ className: "rb-label",
22366
+ style: textColorStyle("text/70")
22367
+ }, bind("module.heading"), when("module.heading")),
22368
+ brandLogo,
22369
+ navigation,
22370
+ stack({
22371
+ gap: "sm",
22372
+ className: "rb-w-full"
22373
+ }, [legalNavigation], when("module.kind", { equals: "legal-navigation" })),
22374
+ address,
22375
+ contact,
22376
+ hours,
22377
+ socials,
22378
+ stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
22379
+ stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
22380
+ ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
22381
+ const footerMainRegion = stack({
22382
+ className: { $bind: { from: "region.className" } },
22383
+ "data-footer-region": { $bind: { from: "region.kind" } }
22384
+ }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
22385
+ const footerBottomRegion = stack({ className: { $bind: {
22386
+ from: "$root.theme.footer",
22387
+ transforms: [{ id: "layout.footerBottomBarContainerClass" }],
22388
+ fallback: "rb-w-full"
22389
+ } } }, [stack({
22358
22390
  className: { $bind: {
22359
22391
  from: "$root.theme.footer",
22360
- transforms: [{ id: "layout.footerRootClass" }],
22361
- fallback: "rb-w-full rb-border-t transition-theme"
22392
+ transforms: [{ id: "layout.footerBottomBarClass" }],
22393
+ fallback: "rb-w-full rb-border-t rb-px-6 rb-py-6 rb-text-center"
22362
22394
  } },
22363
22395
  style: { $bind: {
22364
22396
  from: "$root.theme.footer",
22365
- transforms: [{ id: "layout.footerRootStyle" }],
22366
- fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
22367
- } }
22368
- }, [
22369
- simpleFooterLayout,
22370
- columnsFooterLayout,
22371
- splitFooterLayout,
22372
- stack({
22373
- className: { $bind: {
22374
- from: "$root.theme.footer",
22375
- transforms: [{ id: "layout.footerBottomBarClass" }],
22376
- fallback: "rb-w-full rb-border-t rb-py-5"
22377
- } },
22378
- style: { $bind: {
22379
- from: "$root.theme.footer",
22380
- transforms: [{ id: "layout.footerBottomBarStyle" }]
22381
- } }
22382
- }, [stack({ className: { $bind: {
22383
- from: "$root.theme.footer",
22384
- transforms: [{ id: "layout.footerBottomBarContainerClass" }],
22385
- fallback: "rb-container"
22386
- } } }, [...bottomBarTextLayout()])], when("$root.theme.footer.bottomBar.enabled", { equals: true }))
22387
- ]);
22397
+ transforms: [{ id: "layout.footerBottomBarStyle" }]
22398
+ } },
22399
+ "data-footer-region": "bottom"
22400
+ }, [footerGroup])], when("region.kind", { equals: "bottom" }), repeat("content.footerRuntime.regions", "region"));
22388
22401
  const siteFooterBlockDefinition = { manifest: createBlockManifest({
22389
22402
  id: "block.site-footer",
22390
22403
  title: "Site Footer",
22391
22404
  category: "layout",
22392
- fragments: [{
22393
- fragment: footerBottomTextFragment,
22394
- fieldPriority: 0
22395
- }],
22396
22405
  skipSectionStyles: true,
22397
- additionalFields: [{
22398
- id: "showBusinessAddress",
22399
- type: "boolean",
22400
- label: "Add business address to site footer?",
22401
- required: false,
22402
- defaultValue: false,
22403
- ui: { intent: "content" }
22404
- }],
22405
- layout: footerLayout,
22406
- description: "Site-wide footer with navigation links and optional columns.",
22406
+ layout: section({
22407
+ background: "background",
22408
+ className: { $bind: {
22409
+ from: "$root.theme.footer",
22410
+ transforms: [{ id: "layout.footerRootClass" }],
22411
+ fallback: "rb-w-full rb-border-t transition-theme"
22412
+ } },
22413
+ style: { $bind: {
22414
+ from: "$root.theme.footer",
22415
+ transforms: [{ id: "layout.footerRootStyle" }],
22416
+ fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
22417
+ } },
22418
+ "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
22419
+ }, [footerMainRegion, footerBottomRegion]),
22420
+ description: "Site-wide composed footer with canonical shared details.",
22407
22421
  styleTokens: { spacing: "md" },
22408
22422
  paletteHidden: true
22409
22423
  }) };
@@ -22881,7 +22895,7 @@ const repeatedItemsNode = repeaterFragmentLayout({
22881
22895
  id: "boxStyles.all",
22882
22896
  options: {
22883
22897
  axis: "all",
22884
- baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-hidden rb-border"
22898
+ baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
22885
22899
  }
22886
22900
  }]
22887
22901
  },
@@ -34667,16 +34681,17 @@ const backgroundTransforms = [
34667
34681
  run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
34668
34682
  },
34669
34683
  {
34670
- id: "background.resolveAllowOverflow",
34684
+ id: "background.resolveFrameClassName",
34671
34685
  kind: "formatter",
34672
- summary: "Resolve allowOverflow from background config (explicit overflow or scaled image)",
34673
- run: (value) => {
34674
- if (!value || typeof value !== "object") return false;
34686
+ summary: "Resolve clipping on a decorative background frame without clipping foreground content",
34687
+ run: (value, options) => {
34688
+ const baseClass = options?.baseClass?.trim() ?? "";
34689
+ if (!value || typeof value !== "object") return `${baseClass} rb-overflow-hidden`.trim();
34675
34690
  const input = value;
34676
- if (input.overflow === true) return true;
34691
+ if (input.overflow === true) return `${baseClass} rb-overflow-visible`.trim();
34677
34692
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
34678
34693
  const scale = isString(input.scale) ? input.scale.trim() : isNumber(input.scale) ? String(input.scale) : null;
34679
- return Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0);
34694
+ return `${baseClass} ${Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0) ? "rb-overflow-visible" : "rb-overflow-hidden"}`.trim();
34680
34695
  }
34681
34696
  },
34682
34697
  {