@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
@@ -44,6 +44,12 @@ function parsePublicProductCategorySelector(value) {
44
44
  }
45
45
  //#endregion
46
46
  //#region ../api/src/apiEndpointTypes.ts
47
+ function allowedDemoMutationPolicy() {
48
+ return {
49
+ classification: "allowed",
50
+ publicMessage: ""
51
+ };
52
+ }
47
53
  function blockedDemoMutationPolicy(classification, publicMessage) {
48
54
  if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
49
55
  return {
@@ -71,6 +77,7 @@ const TAG_TEMPLATES = {
71
77
  siteRouteOutcomes: "riverbank:site:{siteId}:route-outcomes",
72
78
  routeById: "riverbank:route:{routeId}",
73
79
  pageById: "riverbank:page:{pageId}",
80
+ pageSurfaceById: "riverbank:page-surface:{pageSurfaceId}",
74
81
  workflowRunById: "riverbank:workflow-run:{runId}",
75
82
  siteForms: "riverbank:site:{siteId}:forms",
76
83
  formById: "riverbank:form:{formId}",
@@ -96,6 +103,7 @@ const TAG_TEMPLATES = {
96
103
  const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
97
104
  const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
98
105
  const DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
106
+ const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
99
107
  const API_ENDPOINTS$1 = {
100
108
  aiContentUpdateChat: {
101
109
  path: "/ai/content-update-chat",
@@ -2234,6 +2242,49 @@ const API_ENDPOINTS$1 = {
2234
2242
  auth: "user",
2235
2243
  responseKind: "json"
2236
2244
  },
2245
+ updatePageSurfaceDraftContent: {
2246
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content",
2247
+ method: "PUT",
2248
+ errors: [
2249
+ "validation:invalid_input",
2250
+ "resource:not_found",
2251
+ "resource:conflict",
2252
+ "server:internal_error"
2253
+ ],
2254
+ tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById],
2255
+ auth: "user",
2256
+ responseKind: "json"
2257
+ },
2258
+ discardPageSurfaceDraftContent: {
2259
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/content/draft",
2260
+ method: "DELETE",
2261
+ errors: [
2262
+ "validation:invalid_input",
2263
+ "resource:not_found",
2264
+ "resource:conflict",
2265
+ "server:internal_error"
2266
+ ],
2267
+ tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById],
2268
+ auth: "user",
2269
+ responseKind: "json"
2270
+ },
2271
+ updatePageSurfaceRouteMetadata: {
2272
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/metadata",
2273
+ method: "PATCH",
2274
+ errors: [
2275
+ "validation:invalid_input",
2276
+ "resource:not_found",
2277
+ "resource:conflict",
2278
+ "server:internal_error"
2279
+ ],
2280
+ tags: [
2281
+ TAG_TEMPLATES.siteCollection,
2282
+ TAG_TEMPLATES.siteRoutableContent,
2283
+ TAG_TEMPLATES.pageSurfaceById
2284
+ ],
2285
+ auth: "user",
2286
+ responseKind: "json"
2287
+ },
2237
2288
  runSdkWorkflow: {
2238
2289
  path: "/sites/{siteId}/content/{type}/{entryId}/workflows/{workflowId}/run",
2239
2290
  method: "POST",
@@ -2614,6 +2665,50 @@ const API_ENDPOINTS$1 = {
2614
2665
  errors: [],
2615
2666
  responseKind: "json"
2616
2667
  },
2668
+ getFooterComposition: {
2669
+ path: "/sites/{siteId}/settings/footer-composition",
2670
+ method: "GET",
2671
+ revalidate: 120,
2672
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2673
+ auth: "user",
2674
+ errors: ["resource:not_found", "server:internal_error"],
2675
+ responseKind: "json"
2676
+ },
2677
+ updateFooterComposition: {
2678
+ path: "/sites/{siteId}/settings/footer-composition",
2679
+ method: "POST",
2680
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2681
+ auth: "user",
2682
+ demoMutation: DEMO_MUTATION_ALLOWED,
2683
+ errors: [
2684
+ "validation:invalid_input",
2685
+ "resource:not_found",
2686
+ "server:internal_error"
2687
+ ],
2688
+ responseKind: "json"
2689
+ },
2690
+ getPublicProfile: {
2691
+ path: "/sites/{siteId}/settings/public-profile",
2692
+ method: "GET",
2693
+ revalidate: 120,
2694
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2695
+ auth: "user",
2696
+ errors: ["resource:not_found", "server:internal_error"],
2697
+ responseKind: "json"
2698
+ },
2699
+ updatePublicProfile: {
2700
+ path: "/sites/{siteId}/settings/public-profile",
2701
+ method: "POST",
2702
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2703
+ auth: "user",
2704
+ demoMutation: DEMO_MUTATION_ALLOWED,
2705
+ errors: [
2706
+ "validation:invalid_input",
2707
+ "resource:not_found",
2708
+ "server:internal_error"
2709
+ ],
2710
+ responseKind: "json"
2711
+ },
2617
2712
  updateSiteLayoutSettings: {
2618
2713
  path: "/sites/{siteId}/settings/layout",
2619
2714
  method: "POST",
@@ -3686,6 +3781,76 @@ const API_ENDPOINTS$1 = {
3686
3781
  responseKind: "json",
3687
3782
  errors: ["resource:not_found"]
3688
3783
  },
3784
+ listPageSurfaceContentSlots: {
3785
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/slots",
3786
+ method: "GET",
3787
+ tags: [
3788
+ TAG_TEMPLATES.siteCollection,
3789
+ TAG_TEMPLATES.pageSurfaceById,
3790
+ "surface-slots",
3791
+ "blocks"
3792
+ ],
3793
+ auth: "user",
3794
+ responseKind: "json",
3795
+ errors: [
3796
+ "resource:not_found",
3797
+ "resource:conflict",
3798
+ "server:internal_error"
3799
+ ]
3800
+ },
3801
+ createPageSurfaceSlotBlock: {
3802
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/slots/{slotKey}/blocks",
3803
+ method: "POST",
3804
+ tags: [
3805
+ TAG_TEMPLATES.siteCollection,
3806
+ TAG_TEMPLATES.pageSurfaceById,
3807
+ "surface-slot-{slotKey}",
3808
+ "blocks"
3809
+ ],
3810
+ auth: "user",
3811
+ responseKind: "json",
3812
+ errors: [
3813
+ "validation:invalid_input",
3814
+ "resource:not_found",
3815
+ "resource:conflict",
3816
+ "server:internal_error"
3817
+ ]
3818
+ },
3819
+ reorderPageSurfaceSlotBlocks: {
3820
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/slots/{slotKey}/blocks/reorder",
3821
+ method: "POST",
3822
+ tags: [
3823
+ TAG_TEMPLATES.siteCollection,
3824
+ TAG_TEMPLATES.pageSurfaceById,
3825
+ "surface-slot-{slotKey}",
3826
+ "blocks"
3827
+ ],
3828
+ auth: "user",
3829
+ responseKind: "json",
3830
+ errors: [
3831
+ "validation:invalid_input",
3832
+ "resource:not_found",
3833
+ "resource:conflict",
3834
+ "server:internal_error"
3835
+ ]
3836
+ },
3837
+ deletePageSurfaceSlotBlock: {
3838
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/slots/{slotKey}/blocks/{blockId}",
3839
+ method: "DELETE",
3840
+ tags: [
3841
+ TAG_TEMPLATES.siteCollection,
3842
+ TAG_TEMPLATES.pageSurfaceById,
3843
+ "surface-slot-{slotKey}",
3844
+ "blocks"
3845
+ ],
3846
+ auth: "user",
3847
+ responseKind: "json",
3848
+ errors: [
3849
+ "resource:not_found",
3850
+ "resource:conflict",
3851
+ "server:internal_error"
3852
+ ]
3853
+ },
3689
3854
  createBlock: {
3690
3855
  path: "/sites/{siteId}/pages/{pageId}/blocks",
3691
3856
  method: "POST",
@@ -6298,6 +6463,19 @@ const API_ENDPOINTS$1 = {
6298
6463
  auth: "service",
6299
6464
  responseKind: "json"
6300
6465
  },
6466
+ sdkPatchPageBlock: {
6467
+ path: "/sdk/{siteId}/pages/{identifier}/blocks/{blockIdentifier}",
6468
+ method: "PATCH",
6469
+ errors: [
6470
+ "validation:invalid_input",
6471
+ "resource:not_found",
6472
+ "resource:conflict",
6473
+ "billing:plan_limit_exceeded",
6474
+ "server:internal_error"
6475
+ ],
6476
+ auth: "service",
6477
+ responseKind: "json"
6478
+ },
6301
6479
  sdkReorderPageBlocks: {
6302
6480
  path: "/sdk/{siteId}/pages/{identifier}/blocks/reorder",
6303
6481
  method: "POST",
@@ -7573,7 +7751,7 @@ var SimpleCache = class {
7573
7751
  * 1. This constant
7574
7752
  * 2. The "version" field in package.json
7575
7753
  */
7576
- const SDK_VERSION = "0.107.0";
7754
+ const SDK_VERSION = "0.108.0";
7577
7755
  //#endregion
7578
7756
  //#region src/client/error.ts
7579
7757
  let _Symbol$for;
@@ -15036,104 +15214,153 @@ const showtimePill = defineButtonPersonality({
15036
15214
  }
15037
15215
  });
15038
15216
  //#endregion
15039
- //#region ../theme-core/src/buttons/personalities/index.ts
15040
- const buttonPersonalities = [
15041
- defineButtonPersonality({
15042
- id: "soft-pill",
15043
- name: "Soft Pill",
15044
- description: "Rounded pills with a gentle lift on hover. Quietly modern.",
15045
- tags: {
15046
- tone: "classic",
15047
- energy: "calm",
15048
- motion: "subtle",
15049
- era: "organic"
15217
+ //#region ../theme-core/src/buttons/personalities/soft-pill.ts
15218
+ /**
15219
+ * Soft Pill — rounded-full pill buttons with a hover lift. The default for
15220
+ * Calm Studio and Modern Wellness; reads as quietly modern and welcoming.
15221
+ */
15222
+ const softPill = defineButtonPersonality({
15223
+ id: "soft-pill",
15224
+ name: "Soft Pill",
15225
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
15226
+ tags: {
15227
+ tone: "classic",
15228
+ energy: "calm",
15229
+ motion: "subtle",
15230
+ era: "organic"
15231
+ },
15232
+ buttonSystem: {
15233
+ global: {
15234
+ cornerStyle: "pill",
15235
+ shadow: "low",
15236
+ textTransform: "none",
15237
+ fontWeight: 500,
15238
+ borderWidth: 2,
15239
+ hoverTransform: "lift",
15240
+ hoverColor: "none"
15050
15241
  },
15051
- buttonSystem: {
15052
- global: {
15053
- cornerStyle: "pill",
15054
- shadow: "low",
15055
- textTransform: "none",
15056
- fontWeight: 500,
15057
- borderWidth: 2,
15058
- hoverTransform: "lift",
15059
- hoverColor: "none"
15060
- },
15061
- variants: [
15062
- {
15063
- id: "primary",
15064
- name: "Primary",
15065
- enabled: true,
15066
- priority: 1,
15067
- background: {
15068
- type: "solid",
15069
- colorToken: "primary"
15070
- },
15071
- textColorToken: "primaryForeground",
15072
- borderRadius: "rounded-full",
15073
- shadow: {
15074
- elevation: "low",
15075
- softness: "soft",
15076
- position: "bottom"
15077
- },
15078
- effects: {
15079
- hover: [{
15080
- effectId: "lift",
15081
- options: { translateY: "-1px" }
15082
- }],
15083
- active: [{
15084
- effectId: "scale-down",
15085
- options: { scale: "0.98" }
15086
- }]
15087
- }
15088
- },
15089
- {
15090
- id: "secondary",
15091
- name: "Secondary",
15092
- enabled: true,
15093
- priority: 2,
15094
- background: { type: "transparent" },
15095
- textColorToken: "primary",
15096
- borderRadius: "rounded-full",
15097
- border: {
15098
- widthClass: "border-2",
15099
- colorToken: "primary"
15100
- },
15101
- effects: { hover: [{
15102
- effectId: "background-on-hover",
15103
- options: { colorToken: "surface" }
15104
- }] }
15242
+ variants: [
15243
+ {
15244
+ id: "primary",
15245
+ name: "Primary",
15246
+ enabled: true,
15247
+ priority: 1,
15248
+ background: {
15249
+ type: "solid",
15250
+ colorToken: "primary"
15105
15251
  },
15106
- {
15107
- id: "outline",
15108
- name: "Outline",
15109
- enabled: true,
15110
- priority: 3,
15111
- background: { type: "transparent" },
15112
- textColorToken: "text",
15113
- borderRadius: "rounded-full",
15114
- border: {
15115
- widthClass: "border",
15116
- colorToken: "border"
15117
- },
15118
- effects: { hover: [{
15119
- effectId: "background-on-hover",
15120
- options: { colorToken: "surface" }
15121
- }] }
15252
+ textColorToken: "primaryForeground",
15253
+ borderRadius: "rounded-full",
15254
+ shadow: {
15255
+ elevation: "low",
15256
+ softness: "soft",
15257
+ position: "bottom"
15122
15258
  },
15123
- {
15124
- id: "ghost",
15125
- name: "Ghost",
15126
- enabled: true,
15127
- priority: 3,
15128
- background: { type: "transparent" },
15129
- textColorToken: "text",
15130
- borderRadius: "rounded-full",
15131
- effects: { hover: [{
15132
- effectId: "background-on-hover",
15133
- options: { colorToken: "surface" }
15134
- }] }
15259
+ effects: {
15260
+ hover: [{
15261
+ effectId: "lift",
15262
+ options: { translateY: "-1px" }
15263
+ }],
15264
+ active: [{
15265
+ effectId: "scale-down",
15266
+ options: { scale: "0.98" }
15267
+ }]
15135
15268
  }
15136
- ]
15269
+ },
15270
+ {
15271
+ id: "secondary",
15272
+ name: "Secondary",
15273
+ enabled: true,
15274
+ priority: 2,
15275
+ background: { type: "transparent" },
15276
+ textColorToken: "primary",
15277
+ borderRadius: "rounded-full",
15278
+ border: {
15279
+ widthClass: "border-2",
15280
+ colorToken: "primary"
15281
+ },
15282
+ effects: { hover: [{
15283
+ effectId: "background-on-hover",
15284
+ options: { colorToken: "surface" }
15285
+ }] }
15286
+ },
15287
+ {
15288
+ id: "outline",
15289
+ name: "Outline",
15290
+ enabled: true,
15291
+ priority: 3,
15292
+ background: { type: "transparent" },
15293
+ textColorToken: "text",
15294
+ borderRadius: "rounded-full",
15295
+ border: {
15296
+ widthClass: "border",
15297
+ colorToken: "border"
15298
+ },
15299
+ effects: { hover: [{
15300
+ effectId: "background-on-hover",
15301
+ options: { colorToken: "surface" }
15302
+ }] }
15303
+ },
15304
+ {
15305
+ id: "ghost",
15306
+ name: "Ghost",
15307
+ enabled: true,
15308
+ priority: 3,
15309
+ background: { type: "transparent" },
15310
+ textColorToken: "text",
15311
+ borderRadius: "rounded-full",
15312
+ effects: { hover: [{
15313
+ effectId: "background-on-hover",
15314
+ options: { colorToken: "surface" }
15315
+ }] }
15316
+ }
15317
+ ]
15318
+ }
15319
+ });
15320
+ //#endregion
15321
+ //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
15322
+ const solidSecondary = {
15323
+ id: "secondary",
15324
+ name: "Secondary",
15325
+ enabled: true,
15326
+ priority: 2,
15327
+ background: {
15328
+ type: "solid",
15329
+ colorToken: "secondary"
15330
+ },
15331
+ textColorToken: "onSecondary",
15332
+ borderRadius: "rounded-full",
15333
+ shadow: {
15334
+ elevation: "none",
15335
+ softness: null,
15336
+ position: "bottom"
15337
+ },
15338
+ effects: {
15339
+ hover: [{
15340
+ effectId: "background-on-hover-alpha",
15341
+ options: {
15342
+ colorToken: "secondary",
15343
+ opacity: 88
15344
+ }
15345
+ }],
15346
+ active: [{
15347
+ effectId: "scale-down",
15348
+ options: { scale: "0.98" }
15349
+ }]
15350
+ }
15351
+ };
15352
+ //#endregion
15353
+ //#region ../theme-core/src/buttons/personalities/index.ts
15354
+ const buttonPersonalities = [
15355
+ softPill,
15356
+ defineButtonPersonality({
15357
+ id: "two-tone-pill",
15358
+ name: "Two-tone Pill",
15359
+ description: "Rounded pills with distinct solid primary and secondary brand colours.",
15360
+ tags: softPill.tags,
15361
+ buttonSystem: {
15362
+ ...softPill.buttonSystem,
15363
+ variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
15137
15364
  }
15138
15365
  }),
15139
15366
  earthPill,
@@ -16667,6 +16894,7 @@ const navFontWeight = z$1.enum([
16667
16894
  "bold"
16668
16895
  ]);
16669
16896
  const headerMaxWidth = z$1.enum(["container", "full"]);
16897
+ const headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
16670
16898
  const headerContainerSchema = z$1.object({
16671
16899
  rounded: z$1.enum([
16672
16900
  "none",
@@ -16811,6 +17039,7 @@ const headerSchema = z$1.object({
16811
17039
  positioning: headerPositioning,
16812
17040
  shrinkOnScroll: z$1.boolean(),
16813
17041
  maxWidth: headerMaxWidth,
17042
+ barFrame: headerBarFrame.optional(),
16814
17043
  logoOverride: mediaSchema$1.nullable().optional(),
16815
17044
  background: headerBackgroundSchema.default({
16816
17045
  type: "color",
@@ -16820,6 +17049,7 @@ const headerSchema = z$1.object({
16820
17049
  navStyle: headerNavStyle,
16821
17050
  navColor: themeColorTokenSchema.nullable().optional(),
16822
17051
  navWeight: navFontWeight.default("medium"),
17052
+ navFontRole: z$1.enum(["body", "heading"]).optional(),
16823
17053
  navTypography: z$1.enum(["body", "heading"]).optional(),
16824
17054
  navTextSize: navLinkStyleSchema.shape.textSize,
16825
17055
  navPlacement: z$1.enum(["end", "center"]).optional(),
@@ -16835,7 +17065,21 @@ const headerSchema = z$1.object({
16835
17065
  ctaTreatment: headerCtaTreatmentSchema.optional(),
16836
17066
  ctaVariant: z$1.string().min(1).optional(),
16837
17067
  dropdownStyle: dropdownStyleSchema
16838
- });
17068
+ }).transform(normaliseHeaderNavFontRole);
17069
+ /**
17070
+ * Normalises the legacy `navTypography` font-role alias into the canonical
17071
+ * `navFontRole` field so persisted themes migrate at the parse boundary without
17072
+ * a data migration. `navFontRole` always wins when both are present; the legacy
17073
+ * field is dropped so we never carry a dual write forward.
17074
+ */
17075
+ function normaliseHeaderNavFontRole(header) {
17076
+ if (header.navTypography === void 0) return header;
17077
+ const { navTypography, ...rest } = header;
17078
+ return header.navFontRole === void 0 ? {
17079
+ ...rest,
17080
+ navFontRole: navTypography
17081
+ } : rest;
17082
+ }
16839
17083
  const footerVariant = z$1.enum([
16840
17084
  "simple",
16841
17085
  "columns",
@@ -18743,7 +18987,7 @@ const overlayLogoAccommodations = [
18743
18987
  * optional nested styling fields that would otherwise leak from another Look.
18744
18988
  */
18745
18989
  function baseHeader(theme) {
18746
- 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;
18990
+ 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;
18747
18991
  return {
18748
18992
  ...header,
18749
18993
  navContainer: {
@@ -18892,6 +19136,17 @@ const headerStyleCatalog = defineExactCatalog()([
18892
19136
  navTypography: "brand-caps",
18893
19137
  moods: ["expressive"]
18894
19138
  },
19139
+ {
19140
+ id: asHeaderStyleId("brand-capsule"),
19141
+ label: "Brand Capsule",
19142
+ description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
19143
+ supportedLayoutIds: supportedLayouts(["classic"]),
19144
+ navInteraction: "pill-background",
19145
+ surface: "brand-solid",
19146
+ defaultDepth: "shadow",
19147
+ navTypography: "quiet-caps",
19148
+ moods: ["expressive", "professional"]
19149
+ },
18895
19150
  {
18896
19151
  id: asHeaderStyleId("serif-line"),
18897
19152
  label: "Serif Line",
@@ -18985,6 +19240,7 @@ const headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
18985
19240
  "brand-bar",
18986
19241
  "brand-underline",
18987
19242
  "brand-pill",
19243
+ "brand-capsule",
18988
19244
  "serif-line",
18989
19245
  "flat-tabs"
18990
19246
  ])],
@@ -19022,6 +19278,11 @@ headerStyleRepairChain([
19022
19278
  "brand-pill",
19023
19279
  "brand-bar",
19024
19280
  "minimal"
19281
+ ]), headerStyleRepairChain([
19282
+ "brand-capsule",
19283
+ "brand-pill",
19284
+ "brand-bar",
19285
+ "minimal"
19025
19286
  ]), headerStyleRepairChain([
19026
19287
  "pill-nav",
19027
19288
  "soft-bar",
@@ -21259,6 +21520,7 @@ const curatedSiteStyles = [
21259
21520
  ],
21260
21521
  buttonPersonalityChoices: [
21261
21522
  buttonChoice("soft-pill"),
21523
+ buttonChoice("two-tone-pill"),
21262
21524
  buttonChoice("pebble"),
21263
21525
  buttonChoice("editorial-link"),
21264
21526
  buttonChoice("brushed-wash")
@@ -22438,6 +22700,7 @@ const curatedSiteStyles = [
22438
22700
  ],
22439
22701
  buttonPersonalityChoices: [
22440
22702
  buttonChoice("quiet-arrow"),
22703
+ buttonChoice("two-tone-pill"),
22441
22704
  buttonChoice("flat-ink"),
22442
22705
  buttonChoice("editorial-link")
22443
22706
  ],
@@ -24872,6 +25135,7 @@ function devValidate(node) {
24872
25135
  }
24873
25136
  //#endregion
24874
25137
  //#region ../blocks/src/system/node/fragments/backgroundLayer.ts
25138
+ 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";
24875
25139
  /**
24876
25140
  * Creates background layer nodes for rendering backgrounds from field data.
24877
25141
  *
@@ -24937,6 +25201,34 @@ function backgroundLayer(path, options = {}) {
24937
25201
  ];
24938
25202
  }
24939
25203
  /**
25204
+ * Wrap decorative background layers in their own clipping frame.
25205
+ *
25206
+ * Foreground content remains outside this frame, so editor outlines, focus
25207
+ * rings, and floating controls are never clipped by a visual background.
25208
+ * Backgrounds that explicitly opt into overflow keep that behavior within
25209
+ * the decorative layer rather than changing the content root.
25210
+ */
25211
+ function backgroundFrame(path, options = {}) {
25212
+ const { leadingNodes = [], ...layerOptions } = options;
25213
+ const framedLayerOptions = {
25214
+ ...layerOptions,
25215
+ styleClassName: layerOptions.styleClassName ?? "background-style rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none",
25216
+ imageClassName: layerOptions.imageClassName ?? "rb-absolute rb-z-0",
25217
+ overlayClassName: layerOptions.overlayClassName ?? "background-overlay rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none"
25218
+ };
25219
+ return el("div", {
25220
+ className: { $bind: {
25221
+ from: path,
25222
+ transforms: [{
25223
+ id: "background.resolveFrameClassName",
25224
+ options: { baseClass: BACKGROUND_FRAME_BASE_CLASS }
25225
+ }],
25226
+ fallback: `${BACKGROUND_FRAME_BASE_CLASS} rb-overflow-hidden`
25227
+ } },
25228
+ style: { borderRadius: "inherit" }
25229
+ }, [...leadingNodes, ...backgroundLayer(path, framedLayerOptions)]);
25230
+ }
25231
+ /**
24940
25232
  * Creates a media node for rendering background image/video media with conditional rendering.
24941
25233
  *
24942
25234
  * This helper creates a media element that:
@@ -25098,8 +25390,8 @@ function sectionContainer(children, opts) {
25098
25390
  * - content
25099
25391
  */
25100
25392
  function styledContainer(config) {
25101
- 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;
25102
- const backgroundNodes = backgroundLayer(`${bindFrom}.background`, { imageClassName });
25393
+ const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-visible", imageClassName = "rb-absolute rb-z-0", constrainWidth = true } = config;
25394
+ const backgroundNode = backgroundFrame(`${bindFrom}.background`, { imageClassName });
25103
25395
  const childrenArray = Array.isArray(children) ? children : [children];
25104
25396
  const { className: _ignoredClassName, style: _ignoredStyle, ...safeRootProps } = rootProps ?? {};
25105
25397
  return el(rootType, {
@@ -25122,7 +25414,7 @@ function styledContainer(config) {
25122
25414
  }],
25123
25415
  fallback: constrainWidth ? `${baseClassName} rb-container` : baseClassName
25124
25416
  } }
25125
- }, [...backgroundNodes, ...childrenArray]);
25417
+ }, [backgroundNode, ...childrenArray]);
25126
25418
  }
25127
25419
  //#endregion
25128
25420
  //#region ../blocks/src/system/spacing.ts
@@ -25255,7 +25547,7 @@ const DEFAULT_SECTION_SPACING = "medium";
25255
25547
  * - Creating a section wrapper with background theme
25256
25548
  * - Adding background color/gradient/image layers
25257
25549
  * - Binding className to section styles with transform
25258
- * - Binding allowOverflow for background positioning
25550
+ * - Keeping foreground overflow visible while decorative backgrounds clip independently
25259
25551
  * - Wrapping content children
25260
25552
  *
25261
25553
  * Use this helper to eliminate 25+ lines of boilerplate section setup code.
@@ -25291,8 +25583,8 @@ const DEFAULT_SECTION_SPACING = "medium";
25291
25583
  * });
25292
25584
  */
25293
25585
  function styledSection(config) {
25294
- 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;
25295
- const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
25586
+ 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;
25587
+ const renderedBackgroundNode = backgroundFrame(`${bindFrom}.background`, {
25296
25588
  imageClassName,
25297
25589
  fallbackToken: background,
25298
25590
  omitImageLayer: !renderBackgroundImage,
@@ -25315,13 +25607,8 @@ function styledSection(config) {
25315
25607
  fullWidthPath
25316
25608
  }
25317
25609
  }]
25318
- } },
25319
- allowOverflow: allowOverflow ? true : { $bind: {
25320
- from: `${bindFrom}.background`,
25321
- transforms: [{ id: "background.resolveAllowOverflow" }],
25322
- fallback: false
25323
25610
  } }
25324
- }, [...renderedBackgroundNodes, ...childrenArray]);
25611
+ }, [renderedBackgroundNode, ...childrenArray]);
25325
25612
  }
25326
25613
  //#endregion
25327
25614
  //#region ../blocks/src/system/node/fragments/ctaButton.ts
@@ -26182,9 +26469,12 @@ function responsiveTwoColumn({ image, text, ratioFrom, imagePositionFrom, gapCla
26182
26469
  //#endregion
26183
26470
  //#region ../blocks/src/system/node/fragments/styledCard.ts
26184
26471
  function styledCard(children, opts, ...mods) {
26185
- const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-hidden rb-border";
26186
- 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" });
26187
- const backgroundNodes = backgroundLayer(opts.backgroundFrom);
26472
+ const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-visible rb-border";
26473
+ const defaultBackgroundLayer = el("div", {
26474
+ className: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none rb-bg-surface",
26475
+ style: { borderRadius: "inherit" }
26476
+ });
26477
+ const backgroundNode = backgroundFrame(opts.backgroundFrom);
26188
26478
  const style = {
26189
26479
  ...opts.style ?? {},
26190
26480
  borderColor: { $bind: {
@@ -26211,7 +26501,7 @@ function styledCard(children, opts, ...mods) {
26211
26501
  ...style ? { style } : {}
26212
26502
  }, [
26213
26503
  defaultBackgroundLayer,
26214
- ...backgroundNodes,
26504
+ backgroundNode,
26215
26505
  ...children
26216
26506
  ], ...mods);
26217
26507
  }
@@ -27220,7 +27510,7 @@ function buildTestimonialCard(...mods) {
27220
27510
  }, 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())])], {
27221
27511
  stylesFrom: "content._cardStyles",
27222
27512
  backgroundFrom: "content._cardStyles.background",
27223
- baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-hidden rb-p-8"
27513
+ baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-visible rb-p-8"
27224
27514
  }, ...mods);
27225
27515
  }
27226
27516
  /**
@@ -27692,39 +27982,6 @@ const formEmbedFragment = defineFragment({
27692
27982
  }
27693
27983
  });
27694
27984
  //#endregion
27695
- //#region ../blocks/src/system/fragments/library/footerBottomText.ts
27696
- const footerBottomTextFragment = defineFragment({
27697
- id: "footerBottomText",
27698
- title: "Footer Text",
27699
- description: "Rich text content for the main footer body and optional bottom bar.",
27700
- fields: [{
27701
- id: "bodyText",
27702
- type: "richText",
27703
- label: "Body text",
27704
- description: "Appears in the main footer area.",
27705
- ui: { variant: "limited" }
27706
- }, {
27707
- id: "bottomText",
27708
- type: "richText",
27709
- label: "Bottom bar text",
27710
- description: "Appears in the optional footer bottom bar.",
27711
- ui: { variant: "limited" }
27712
- }],
27713
- layout: [richText({
27714
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
27715
- style: textColorStyle("text/80")
27716
- }, when("bodyText"), bind("bodyText", { transforms: [{
27717
- id: "content.interpolateRichTextTokens",
27718
- options: { tokens: ["year", "site_name"] }
27719
- }] })), richText({
27720
- className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
27721
- style: textColorStyle("text/80")
27722
- }, when("bottomText"), bind("bottomText", { transforms: [{
27723
- id: "content.interpolateRichTextTokens",
27724
- options: { tokens: ["year", "site_name"] }
27725
- }] }))]
27726
- });
27727
- //#endregion
27728
27985
  //#region ../blocks/src/system/fragments/library/singleButton.ts
27729
27986
  const singleButtonFragment = defineFragment({
27730
27987
  id: "singleButton",
@@ -27897,7 +28154,7 @@ function createFaqAccordionLayout(options = {}) {
27897
28154
  options: {
27898
28155
  axis: "all",
27899
28156
  includeSpacing: false,
27900
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
28157
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-visible"
27901
28158
  }
27902
28159
  }]
27903
28160
  },
@@ -29021,7 +29278,6 @@ function splitLayoutWith(children) {
29021
29278
  }
29022
29279
  }),
29023
29280
  renderBackgroundImage: false,
29024
- allowOverflow: true,
29025
29281
  baseClass: ""
29026
29282
  });
29027
29283
  }
@@ -29649,7 +29905,7 @@ function postCard(children, ...mods) {
29649
29905
  return styledCard(children, {
29650
29906
  stylesFrom: "content._cardStyles",
29651
29907
  backgroundFrom: "content._cardStyles.background",
29652
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-flex-col rb-h-full"
29908
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-flex rb-flex-col rb-h-full"
29653
29909
  }, ...mods);
29654
29910
  }
29655
29911
  const gridPostCard = postCard([postImageLink("rb-h-48 rb-w-full rb-object-cover rb-transition-transform rb-hover-scale-105", {
@@ -29685,7 +29941,7 @@ const stackPostCard = styledCard([inline({
29685
29941
  ])])], {
29686
29942
  stylesFrom: "content._cardStyles",
29687
29943
  backgroundFrom: "content._cardStyles.background",
29688
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border"
29944
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border"
29689
29945
  }, repeat("data.posts", "post"));
29690
29946
  const emptyState$2 = {
29691
29947
  ...styledCard([text({
@@ -29694,7 +29950,7 @@ const emptyState$2 = {
29694
29950
  }, bind("content.emptyMessage", { fallback: "No posts published yet." }))], {
29695
29951
  stylesFrom: "content._cardStyles",
29696
29952
  backgroundFrom: "content._cardStyles.background",
29697
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-border-dashed rb-p-8 rb-text-center"
29953
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-border-dashed rb-p-8 rb-text-center"
29698
29954
  }),
29699
29955
  $when: {
29700
29956
  when: { from: "data.posts[0]" },
@@ -29704,7 +29960,7 @@ const emptyState$2 = {
29704
29960
  function blogListingShell(children) {
29705
29961
  return styledSection({
29706
29962
  children: styledContainer({
29707
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden",
29963
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
29708
29964
  children
29709
29965
  }),
29710
29966
  baseClass: ""
@@ -30116,7 +30372,7 @@ const copyLayout = fragmentLayoutNode$1(formCopyFragment.layout);
30116
30372
  const formSurface = styledContainer({
30117
30373
  bindFrom: "_containerStyles",
30118
30374
  constrainWidth: false,
30119
- baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
30375
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
30120
30376
  children: fragmentLayoutNode$1(formEmbedFragment.layout)
30121
30377
  });
30122
30378
  function createFormLayout(variant) {
@@ -31333,6 +31589,7 @@ const headerRootClassTransform = {
31333
31589
  ];
31334
31590
  const variant = header?.variant;
31335
31591
  if (variant && VALID_VARIANTS.includes(variant)) classes.push(`header-variant-${variant}`);
31592
+ if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
31336
31593
  return joinClasses(classes);
31337
31594
  }
31338
31595
  };
@@ -31856,7 +32113,7 @@ function desktopOnlyDisplay(display) {
31856
32113
  }
31857
32114
  //#endregion
31858
32115
  //#region ../blocks/src/system/blocks/site-header.ts
31859
- const whenTransformed$1 = (from, transformId, equals = true) => (node) => ({
32116
+ const whenTransformed = (from, transformId, equals = true) => (node) => ({
31860
32117
  ...node,
31861
32118
  $when: {
31862
32119
  when: {
@@ -31884,7 +32141,7 @@ const logoRow = link({
31884
32141
  text({
31885
32142
  as: "strong",
31886
32143
  className: "header-logo-text rb-truncate"
31887
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
32144
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
31888
32145
  ]);
31889
32146
  const centeredLogoRow = link({
31890
32147
  href: "/",
@@ -31904,7 +32161,7 @@ const centeredLogoRow = link({
31904
32161
  text({
31905
32162
  as: "strong",
31906
32163
  className: "header-logo-text"
31907
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
32164
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
31908
32165
  ]);
31909
32166
  const createNavRow = (className, align = "end") => navRow({
31910
32167
  className: `${className} header-nav-row`,
@@ -32036,7 +32293,7 @@ const classicLayout = inline({
32036
32293
  logoRow,
32037
32294
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
32038
32295
  headerCta
32039
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "inline"));
32296
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
32040
32297
  const classicCenteredNavLayout = inline({
32041
32298
  className: bindProp("$root.theme.header.maxWidth", {
32042
32299
  transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
@@ -32047,7 +32304,7 @@ const classicCenteredNavLayout = inline({
32047
32304
  logoRow,
32048
32305
  createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
32049
32306
  headerCta
32050
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "centered"));
32307
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
32051
32308
  const centeredLayout = stack({
32052
32309
  gap: "md",
32053
32310
  align: "center",
@@ -32110,7 +32367,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
32110
32367
  transforms: pipe(tx("layout.headerSectionBackground")),
32111
32368
  fallback: "background"
32112
32369
  }),
32113
- allowOverflow: true,
32114
32370
  className: bindProp("$root.theme.header", {
32115
32371
  transforms: pipe(tx("layout.headerRootClass")),
32116
32372
  fallback: "header-root rb-z-40 rb-w-full transition-theme"
@@ -32160,218 +32416,154 @@ const footerNavGroupsLayout = stack({
32160
32416
  linkRequired: true,
32161
32417
  target: { $bind: { from: "entry.target" } },
32162
32418
  rel: { $bind: { from: "entry.rel" } }
32163
- }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], when("footerMenu.groups"));
32419
+ }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
32164
32420
  //#endregion
32165
32421
  //#region ../blocks/src/system/blocks/site-footer.ts
32166
- const footerTextLayout = () => materializeFragment({ fragment: footerBottomTextFragment }).layout;
32167
- const whenTransformed = (from, transformId, equals = true) => (node) => ({
32168
- ...node,
32169
- $when: {
32170
- when: {
32171
- from,
32172
- transforms: [{ id: transformId }]
32173
- },
32174
- equals
32175
- }
32176
- });
32177
- const bottomBarTextLayout = () => {
32178
- const bottomTextNode = footerTextLayout()[1];
32179
- return bottomTextNode ? [bottomTextNode] : [];
32180
- };
32181
- const bodyTextLayout = () => {
32182
- const bodyTextNode = footerTextLayout()[0];
32183
- return bodyTextNode ? [bodyTextNode] : [];
32184
- };
32185
- const businessAddressLayout = () => [text({
32186
- as: "p",
32187
- className: "rb-caption rb-opacity-80"
32188
- }, bind("site.businessAddress.displayAddress"), when("content.showBusinessAddress", { equals: true }))];
32189
- const inlineBottomTextLayout = () => {
32190
- const bottomTextNode = footerTextLayout()[1];
32191
- if (!bottomTextNode) return [];
32192
- return [when("$root.theme.footer.bottomBar.enabled", {
32193
- equals: true,
32194
- not: true
32195
- })(bottomTextNode)];
32196
- };
32197
- const simpleFooterLayout = stack({
32198
- gap: "md",
32199
- align: "start",
32200
- className: { $bind: {
32201
- from: "$root.theme.footer",
32202
- transforms: [{ id: "layout.footerSimpleRootClass" }],
32203
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-items-start rb-gap-4 rb-py-10 rb-text-left"
32204
- } }
32205
- }, [
32206
- link({
32207
- href: "/",
32208
- className: { $bind: {
32209
- from: "$root.theme.footer.logo",
32210
- transforms: [{
32211
- id: "layout.footerLogoClass",
32212
- options: { requireExplicitShow: true }
32213
- }],
32214
- fallback: "rb-hidden"
32215
- } }
32216
- }, [
32217
- media({ className: { $bind: {
32218
- from: "$root.theme.footer.logo",
32219
- transforms: [{ id: "layout.footerLogoMediaClass" }],
32220
- fallback: "rb-w-auto"
32221
- } } }, when("content.logo"), bind("content.logo")),
32222
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
32223
- from: "$root.theme.footer.logo",
32224
- transforms: [{ id: "layout.footerLogoMediaClass" }],
32225
- fallback: "rb-w-auto"
32226
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
32227
- text({
32228
- as: "strong",
32229
- className: "footer-logo-text rb-nav-text"
32230
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
32231
- ]),
32232
- footerNav({
32233
- collectionPath: "footerMenu.items",
32234
- mode: "flatten",
32235
- className: { $bind: {
32236
- from: "$root.theme.footer.navLayout",
32237
- transforms: [{ id: "layout.footerSimpleNavClass" }],
32238
- fallback: "footer-nav rb-flex rb-flex-wrap rb-justify-start rb-gap-x-6 rb-gap-y-3"
32239
- } },
32240
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
32241
- }),
32242
- ...bodyTextLayout(),
32243
- ...businessAddressLayout(),
32244
- ...inlineBottomTextLayout()
32245
- ], when("$root.theme.footer.variant", { equals: "simple" }));
32246
- const columnsFooterLayout = stack({
32247
- gap: "xl",
32248
- align: "start",
32422
+ const brandLogo = link({
32423
+ href: "/",
32249
32424
  className: { $bind: {
32250
- from: "$root.theme.footer.maxWidth",
32425
+ from: "$root.theme.footer.logo",
32251
32426
  transforms: [{
32252
- id: "layout.maxWidthClass",
32253
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
32427
+ id: "layout.footerLogoClass",
32428
+ options: { base: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline" }
32254
32429
  }],
32255
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
32430
+ fallback: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline"
32256
32431
  } }
32257
- }, [
32258
- footerNavGroupsLayout,
32259
- inline({ className: "rb-flex rb-w-full rb-flex-wrap rb-items-center rb-justify-between rb-gap-4" }, [text({
32260
- as: "strong",
32261
- className: "rb-block rb-nav-text",
32262
- style: textColorStyle("text")
32263
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" })), footerNav({
32264
- collectionPath: "footerMenu.items",
32265
- mode: "links-only",
32266
- className: "rb-flex rb-flex-wrap rb-justify-end rb-gap-x-6 rb-gap-y-3",
32267
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
32268
- })]),
32269
- ...bodyTextLayout(),
32270
- ...businessAddressLayout(),
32271
- ...inlineBottomTextLayout()
32272
- ], when("$root.theme.footer.variant", { equals: "columns" }));
32273
- const splitFooterLayout = stack({
32274
- gap: "xl",
32275
- align: "start",
32432
+ }, [media({ className: { $bind: {
32433
+ from: "$root.theme.footer.logo",
32434
+ transforms: [{
32435
+ id: "layout.footerLogoMediaClass",
32436
+ options: { base: "rb-h-10 rb-w-auto" }
32437
+ }],
32438
+ fallback: "rb-h-10 rb-w-auto"
32439
+ } } }, when("module.showLogo", { equals: true }), when("content.logo"), bind("content.logo")), text({
32440
+ as: "strong",
32441
+ className: "footer-logo-text rb-nav-text"
32442
+ }, when("module.showTitle", { equals: true }), bind("site.title", { fallback: "Your Site" }))], when("module.kind", { equals: "brand" }));
32443
+ const navigation = stack({
32444
+ gap: "md",
32445
+ className: "rb-w-full"
32446
+ }, [footerNavGroupsLayout, footerNav({
32447
+ collectionPath: "footerMenu.items",
32448
+ mode: "links-only",
32276
32449
  className: { $bind: {
32277
- from: "$root.theme.footer.maxWidth",
32278
- transforms: [{
32279
- id: "layout.maxWidthClass",
32280
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
32281
- }],
32282
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
32283
- } }
32450
+ from: "module.navigationClassName",
32451
+ fallback: "footer-nav rb-flex rb-flex-wrap rb-gap-x-6 rb-gap-y-3"
32452
+ } },
32453
+ linkClassName: "footer-nav-link rb-nav-text transition-theme-standard"
32454
+ })], when("module.kind", { equals: "navigation" }));
32455
+ const legalNavigation = footerNav({
32456
+ collectionPath: "legalFooterMenu.items",
32457
+ mode: "links-only",
32458
+ className: "rb-flex rb-flex-wrap rb-gap-x-4 rb-gap-y-2",
32459
+ linkClassName: "footer-nav-link rb-caption transition-theme-standard"
32460
+ });
32461
+ const address = text({
32462
+ as: "address",
32463
+ className: "rb-not-italic rb-opacity-80"
32464
+ }, when("module.kind", { equals: "business-address" }), bind("module.address"));
32465
+ const contact = stack({
32466
+ gap: "sm",
32467
+ className: "rb-items-start"
32468
+ }, [link({
32469
+ href: { $bind: { from: "contactLink.href" } },
32470
+ className: "rb-nav-text rb-break-words transition-theme-standard"
32471
+ }, [text({ as: "span" }, bind("contactLink.label"))], repeat("module.contactLinks", "contactLink"))], when("module.kind", { equals: "contact" }));
32472
+ const hours = stack({
32473
+ gap: "sm",
32474
+ className: "rb-w-full"
32475
+ }, [inline({ className: "rb-flex rb-w-full rb-justify-between rb-gap-4" }, [text({
32476
+ as: "span",
32477
+ className: "rb-label"
32478
+ }, bind("hoursDay.weekday")), text({
32479
+ as: "span",
32480
+ className: "rb-caption rb-opacity-80"
32481
+ }, bind("hoursDay.hours"))], repeat("module.openingHours", "hoursDay")), text({
32482
+ as: "p",
32483
+ className: "rb-caption rb-opacity-70"
32484
+ }, bind("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
32485
+ const socials = inline({ className: "rb-flex rb-flex-wrap rb-gap-x-5 rb-gap-y-3" }, [link({
32486
+ href: { $bind: { from: "social.href" } },
32487
+ target: "_blank",
32488
+ rel: "noreferrer noopener",
32489
+ "aria-label": { $bind: { from: "social.label" } },
32490
+ className: "rb-nav-text transition-theme-standard"
32491
+ }, [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" }));
32492
+ const authoredCopy = richText({
32493
+ className: "rb-prose rb-prose-sm rb-max-w-none",
32494
+ style: textColorStyle("text/80")
32495
+ }, when("module.content"), bind("module.content", { transforms: [{
32496
+ id: "content.interpolateRichTextTokens",
32497
+ options: { tokens: ["year", "site_name"] }
32498
+ }] }));
32499
+ const footerGroup = stack({
32500
+ gap: "md",
32501
+ align: "stretch",
32502
+ className: "rb-min-w-0",
32503
+ "data-footer-group": { $bind: { from: "group.kind" } }
32504
+ }, [stack({
32505
+ gap: "md",
32506
+ align: "start",
32507
+ "data-preview-footer-module-id": { $bind: { from: "module.id" } }
32284
32508
  }, [
32285
- inline({ className: { $bind: {
32286
- from: "$root.theme.footer.logo",
32287
- transforms: [{ id: "layout.footerSplitMainClass" }],
32288
- 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"
32289
- } } }, [stack({}, [footerNav({
32290
- collectionPath: "footerMenu.items",
32291
- mode: "flatten",
32292
- className: { $bind: {
32293
- from: "$root.theme.footer.navLayout",
32294
- transforms: [{ id: "layout.footerSplitNavSingleClass" }],
32295
- fallback: "rb-w-full rb-space-y-3 rb-text-left"
32296
- } },
32297
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-whitespace-nowrap rb-nav-text transition-theme-standard"
32298
- })]), link({
32299
- href: "/",
32300
- className: { $bind: {
32301
- from: "$root.theme.footer.logo",
32302
- transforms: [{ id: "layout.footerLogoClass" }],
32303
- 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"
32304
- } }
32305
- }, [
32306
- media({ className: { $bind: {
32307
- from: "$root.theme.footer.logo",
32308
- transforms: [{ id: "layout.footerLogoMediaClass" }],
32309
- fallback: "rb-w-auto"
32310
- } } }, when("content.logo"), bind("content.logo")),
32311
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
32312
- from: "$root.theme.footer.logo",
32313
- transforms: [{ id: "layout.footerLogoMediaClass" }],
32314
- fallback: "rb-w-auto"
32315
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
32316
- text({
32317
- as: "strong",
32318
- className: "footer-logo-text rb-nav-text"
32319
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
32320
- ])]),
32321
- ...businessAddressLayout(),
32322
- ...inlineBottomTextLayout()
32323
- ], when("$root.theme.footer.variant", { equals: "split" }));
32324
- const footerLayout = section({
32325
- background: "background",
32509
+ text({
32510
+ as: "h2",
32511
+ className: "rb-label",
32512
+ style: textColorStyle("text/70")
32513
+ }, bind("module.heading"), when("module.heading")),
32514
+ brandLogo,
32515
+ navigation,
32516
+ stack({
32517
+ gap: "sm",
32518
+ className: "rb-w-full"
32519
+ }, [legalNavigation], when("module.kind", { equals: "legal-navigation" })),
32520
+ address,
32521
+ contact,
32522
+ hours,
32523
+ socials,
32524
+ stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
32525
+ stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
32526
+ ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
32527
+ const footerMainRegion = stack({
32528
+ className: { $bind: { from: "region.className" } },
32529
+ "data-footer-region": { $bind: { from: "region.kind" } }
32530
+ }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
32531
+ const footerBottomRegion = stack({ className: { $bind: {
32532
+ from: "$root.theme.footer",
32533
+ transforms: [{ id: "layout.footerBottomBarContainerClass" }],
32534
+ fallback: "rb-w-full"
32535
+ } } }, [stack({
32326
32536
  className: { $bind: {
32327
32537
  from: "$root.theme.footer",
32328
- transforms: [{ id: "layout.footerRootClass" }],
32329
- fallback: "rb-w-full rb-border-t transition-theme"
32538
+ transforms: [{ id: "layout.footerBottomBarClass" }],
32539
+ fallback: "rb-w-full rb-border-t rb-px-6 rb-py-6 rb-text-center"
32330
32540
  } },
32331
32541
  style: { $bind: {
32332
32542
  from: "$root.theme.footer",
32333
- transforms: [{ id: "layout.footerRootStyle" }],
32334
- fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
32335
- } }
32336
- }, [
32337
- simpleFooterLayout,
32338
- columnsFooterLayout,
32339
- splitFooterLayout,
32340
- stack({
32341
- className: { $bind: {
32342
- from: "$root.theme.footer",
32343
- transforms: [{ id: "layout.footerBottomBarClass" }],
32344
- fallback: "rb-w-full rb-border-t rb-py-5"
32345
- } },
32346
- style: { $bind: {
32347
- from: "$root.theme.footer",
32348
- transforms: [{ id: "layout.footerBottomBarStyle" }]
32349
- } }
32350
- }, [stack({ className: { $bind: {
32351
- from: "$root.theme.footer",
32352
- transforms: [{ id: "layout.footerBottomBarContainerClass" }],
32353
- fallback: "rb-container"
32354
- } } }, [...bottomBarTextLayout()])], when("$root.theme.footer.bottomBar.enabled", { equals: true }))
32355
- ]);
32543
+ transforms: [{ id: "layout.footerBottomBarStyle" }]
32544
+ } },
32545
+ "data-footer-region": "bottom"
32546
+ }, [footerGroup])], when("region.kind", { equals: "bottom" }), repeat("content.footerRuntime.regions", "region"));
32356
32547
  const siteFooterBlockDefinition = { manifest: createBlockManifest({
32357
32548
  id: "block.site-footer",
32358
32549
  title: "Site Footer",
32359
32550
  category: "layout",
32360
- fragments: [{
32361
- fragment: footerBottomTextFragment,
32362
- fieldPriority: 0
32363
- }],
32364
32551
  skipSectionStyles: true,
32365
- additionalFields: [{
32366
- id: "showBusinessAddress",
32367
- type: "boolean",
32368
- label: "Add business address to site footer?",
32369
- required: false,
32370
- defaultValue: false,
32371
- ui: { intent: "content" }
32372
- }],
32373
- layout: footerLayout,
32374
- description: "Site-wide footer with navigation links and optional columns.",
32552
+ layout: section({
32553
+ background: "background",
32554
+ className: { $bind: {
32555
+ from: "$root.theme.footer",
32556
+ transforms: [{ id: "layout.footerRootClass" }],
32557
+ fallback: "rb-w-full rb-border-t transition-theme"
32558
+ } },
32559
+ style: { $bind: {
32560
+ from: "$root.theme.footer",
32561
+ transforms: [{ id: "layout.footerRootStyle" }],
32562
+ fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
32563
+ } },
32564
+ "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
32565
+ }, [footerMainRegion, footerBottomRegion]),
32566
+ description: "Site-wide composed footer with canonical shared details.",
32375
32567
  styleTokens: { spacing: "md" },
32376
32568
  paletteHidden: true
32377
32569
  }) };
@@ -32849,7 +33041,7 @@ const repeatedItemsNode = repeaterFragmentLayout({
32849
33041
  id: "boxStyles.all",
32850
33042
  options: {
32851
33043
  axis: "all",
32852
- baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-hidden rb-border"
33044
+ baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
32853
33045
  }
32854
33046
  }]
32855
33047
  },
@@ -44683,16 +44875,17 @@ const backgroundTransforms = [
44683
44875
  run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
44684
44876
  },
44685
44877
  {
44686
- id: "background.resolveAllowOverflow",
44878
+ id: "background.resolveFrameClassName",
44687
44879
  kind: "formatter",
44688
- summary: "Resolve allowOverflow from background config (explicit overflow or scaled image)",
44689
- run: (value) => {
44690
- if (!value || typeof value !== "object") return false;
44880
+ summary: "Resolve clipping on a decorative background frame without clipping foreground content",
44881
+ run: (value, options) => {
44882
+ const baseClass = options?.baseClass?.trim() ?? "";
44883
+ if (!value || typeof value !== "object") return `${baseClass} rb-overflow-hidden`.trim();
44691
44884
  const input = value;
44692
- if (input.overflow === true) return true;
44885
+ if (input.overflow === true) return `${baseClass} rb-overflow-visible`.trim();
44693
44886
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
44694
44887
  const scale = isString(input.scale) ? input.scale.trim() : isNumber(input.scale) ? String(input.scale) : null;
44695
- return Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0);
44888
+ return `${baseClass} ${Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0) ? "rb-overflow-visible" : "rb-overflow-hidden"}`.trim();
44696
44889
  }
44697
44890
  },
44698
44891
  {