@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
@@ -382,7 +382,7 @@ var init_event_pricing = __esmMin((() => {
382
382
  //#endregion
383
383
  //#region ../core/src/event-page-surface-subject.ts
384
384
  function parseEventPageSurfaceSubject(value) {
385
- if (!isRecord$35(value)) return err$3({ kind: "notObject" });
385
+ if (!isRecord$37(value)) return err$3({ kind: "notObject" });
386
386
  switch (value.kind) {
387
387
  case "eventSeries": {
388
388
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -425,7 +425,7 @@ function parseEventPageSurfaceSubject(value) {
425
425
  });
426
426
  }
427
427
  }
428
- function isRecord$35(value) {
428
+ function isRecord$37(value) {
429
429
  return typeof value === "object" && value !== null && !Array.isArray(value);
430
430
  }
431
431
  var init_event_page_surface_subject = __esmMin((() => {
@@ -819,6 +819,25 @@ var init_participant_identity = __esmMin((() => {
819
819
  init_assertNever();
820
820
  }));
821
821
  var init_public_url_validation = __esmMin((() => {}));
822
+ var init_public_profile = __esmMin((() => {
823
+ init_public_url_validation();
824
+ init_result();
825
+ })), sectionKinds;
826
+ var init_footer_composition = __esmMin((() => {
827
+ init_result();
828
+ sectionKinds = [
829
+ "brand",
830
+ "supporting-text",
831
+ "social-links",
832
+ "navigation",
833
+ "business-address",
834
+ "contact",
835
+ "opening-hours",
836
+ "legal-navigation",
837
+ "legal"
838
+ ];
839
+ new Map(sectionKinds.map((kind, index) => [kind, index]));
840
+ }));
822
841
  var init_number_input = __esmMin((() => {}));
823
842
  var init_field_errors = __esmMin((() => {})), init_form_submission_preview = __esmMin((() => {
824
843
  init_string();
@@ -853,7 +872,7 @@ function sortStableJsonValue(value) {
853
872
  if (typeof value === "object") {
854
873
  const prototype = Object.getPrototypeOf(value);
855
874
  if (prototype !== Object.prototype && prototype !== null) throw new TypeError("Stable JSON only supports plain objects");
856
- return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, child]) => [key, sortStableJsonValue(child)]));
875
+ return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([key, child]) => [key, sortStableJsonValue(child)]));
857
876
  }
858
877
  throw new TypeError(`Stable JSON does not support ${typeof value}`);
859
878
  }
@@ -916,6 +935,8 @@ var init_src$3 = __esmMin((() => {
916
935
  init_participants();
917
936
  init_participant_identity();
918
937
  init_public_url_validation();
938
+ init_public_profile();
939
+ init_footer_composition();
919
940
  init_number_input();
920
941
  init_field_errors();
921
942
  init_form_submission_preview();
@@ -942,7 +963,7 @@ function containsUnsafePathSegmentCharacter(value) {
942
963
  function isReservedPathSegment(value) {
943
964
  return value === "." || value === "..";
944
965
  }
945
- function isUnsafePathSegment(segment) {
966
+ function isUnsafePathSegment$1(segment) {
946
967
  return segment.trim().length === 0 || segment !== segment.trim() || isReservedPathSegment(segment) || containsUnsafePathSegmentCharacter(segment);
947
968
  }
948
969
  var CONTROL_CHARACTER_PATTERN$1, init_fileSafety = __esmMin((() => {
@@ -971,7 +992,7 @@ function parseStoragePath(value) {
971
992
  * that every tenant/site identifier remains one segment, never a nested path.
972
993
  */
973
994
  function joinStoragePathSegments(segments) {
974
- if (segments.some(isUnsafePathSegment)) return err$3("unsafe-path-segment");
995
+ if (segments.some(isUnsafePathSegment$1)) return err$3("unsafe-path-segment");
975
996
  return ok$3(unsafeAsStoragePath(segments.join("/")));
976
997
  }
977
998
  var FILE_STORAGE_BUCKETS, PRIVATE_SITE_FILE_BUCKET_MIME_TYPES;
@@ -2612,6 +2633,34 @@ function backgroundLayer(path, options = {}) {
2612
2633
  ];
2613
2634
  }
2614
2635
  /**
2636
+ * Wrap decorative background layers in their own clipping frame.
2637
+ *
2638
+ * Foreground content remains outside this frame, so editor outlines, focus
2639
+ * rings, and floating controls are never clipped by a visual background.
2640
+ * Backgrounds that explicitly opt into overflow keep that behavior within
2641
+ * the decorative layer rather than changing the content root.
2642
+ */
2643
+ function backgroundFrame(path, options = {}) {
2644
+ const { leadingNodes = [], ...layerOptions } = options;
2645
+ const framedLayerOptions = {
2646
+ ...layerOptions,
2647
+ styleClassName: layerOptions.styleClassName ?? "background-style rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none",
2648
+ imageClassName: layerOptions.imageClassName ?? "rb-absolute rb-z-0",
2649
+ overlayClassName: layerOptions.overlayClassName ?? "background-overlay rb-absolute rb-inset-0 rb-z-0 rb-h-full rb-w-full rb-pointer-events-none"
2650
+ };
2651
+ return el("div", {
2652
+ className: { $bind: {
2653
+ from: path,
2654
+ transforms: [{
2655
+ id: "background.resolveFrameClassName",
2656
+ options: { baseClass: BACKGROUND_FRAME_BASE_CLASS }
2657
+ }],
2658
+ fallback: `${BACKGROUND_FRAME_BASE_CLASS} rb-overflow-hidden`
2659
+ } },
2660
+ style: { borderRadius: "inherit" }
2661
+ }, [...leadingNodes, ...backgroundLayer(path, framedLayerOptions)]);
2662
+ }
2663
+ /**
2615
2664
  * Creates a media node for rendering background image/video media with conditional rendering.
2616
2665
  *
2617
2666
  * This helper creates a media element that:
@@ -2686,8 +2735,10 @@ function createBackgroundOverlayNode(path, className = "background-overlay rb-ab
2686
2735
  } }
2687
2736
  });
2688
2737
  }
2738
+ var BACKGROUND_FRAME_BASE_CLASS;
2689
2739
  var init_backgroundLayer = __esmMin((() => {
2690
2740
  init_builder$2();
2741
+ 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";
2691
2742
  }));
2692
2743
  //#endregion
2693
2744
  //#region ../blocks/src/system/spacing.ts
@@ -2781,7 +2832,7 @@ var init_spacing = __esmMin((() => {
2781
2832
  * - Creating a section wrapper with background theme
2782
2833
  * - Adding background color/gradient/image layers
2783
2834
  * - Binding className to section styles with transform
2784
- * - Binding allowOverflow for background positioning
2835
+ * - Keeping foreground overflow visible while decorative backgrounds clip independently
2785
2836
  * - Wrapping content children
2786
2837
  *
2787
2838
  * Use this helper to eliminate 25+ lines of boilerplate section setup code.
@@ -2817,8 +2868,8 @@ var init_spacing = __esmMin((() => {
2817
2868
  * });
2818
2869
  */
2819
2870
  function styledSection(config) {
2820
- 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;
2821
- const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
2871
+ 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;
2872
+ const renderedBackgroundNode = backgroundFrame(`${bindFrom}.background`, {
2822
2873
  imageClassName,
2823
2874
  fallbackToken: background,
2824
2875
  omitImageLayer: !renderBackgroundImage,
@@ -2841,13 +2892,8 @@ function styledSection(config) {
2841
2892
  fullWidthPath
2842
2893
  }
2843
2894
  }]
2844
- } },
2845
- allowOverflow: allowOverflow ? true : { $bind: {
2846
- from: `${bindFrom}.background`,
2847
- transforms: [{ id: "background.resolveAllowOverflow" }],
2848
- fallback: false
2849
2895
  } }
2850
- }, [...renderedBackgroundNodes, ...childrenArray]);
2896
+ }, [renderedBackgroundNode, ...childrenArray]);
2851
2897
  }
2852
2898
  var init_styledSection = __esmMin((() => {
2853
2899
  init_builder$2();
@@ -2953,8 +2999,8 @@ var init_sectionContainer = __esmMin((() => {
2953
2999
  * - content
2954
3000
  */
2955
3001
  function styledContainer(config) {
2956
- 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;
2957
- const backgroundNodes = backgroundLayer(`${bindFrom}.background`, { imageClassName });
3002
+ const { children, rootType = "div", rootProps, bindFrom = "_containerStyles", baseClassName = "rb-relative rb-isolate rb-overflow-visible", imageClassName = "rb-absolute rb-z-0", constrainWidth = true } = config;
3003
+ const backgroundNode = backgroundFrame(`${bindFrom}.background`, { imageClassName });
2958
3004
  const childrenArray = Array.isArray(children) ? children : [children];
2959
3005
  const { className: _ignoredClassName, style: _ignoredStyle, ...safeRootProps } = rootProps ?? {};
2960
3006
  return el(rootType, {
@@ -2977,7 +3023,7 @@ function styledContainer(config) {
2977
3023
  }],
2978
3024
  fallback: constrainWidth ? `${baseClassName} rb-container` : baseClassName
2979
3025
  } }
2980
- }, [...backgroundNodes, ...childrenArray]);
3026
+ }, [backgroundNode, ...childrenArray]);
2981
3027
  }
2982
3028
  var init_styledContainer = __esmMin((() => {
2983
3029
  init_builder$2();
@@ -10262,6 +10308,53 @@ var init_soft_pill = __esmMin((() => {
10262
10308
  ]
10263
10309
  }
10264
10310
  });
10311
+ }));
10312
+ //#endregion
10313
+ //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
10314
+ var solidSecondary, twoTonePill;
10315
+ var init_two_tone_pill = __esmMin((() => {
10316
+ init_soft_pill();
10317
+ init_types$12();
10318
+ solidSecondary = {
10319
+ id: "secondary",
10320
+ name: "Secondary",
10321
+ enabled: true,
10322
+ priority: 2,
10323
+ background: {
10324
+ type: "solid",
10325
+ colorToken: "secondary"
10326
+ },
10327
+ textColorToken: "onSecondary",
10328
+ borderRadius: "rounded-full",
10329
+ shadow: {
10330
+ elevation: "none",
10331
+ softness: null,
10332
+ position: "bottom"
10333
+ },
10334
+ effects: {
10335
+ hover: [{
10336
+ effectId: "background-on-hover-alpha",
10337
+ options: {
10338
+ colorToken: "secondary",
10339
+ opacity: 88
10340
+ }
10341
+ }],
10342
+ active: [{
10343
+ effectId: "scale-down",
10344
+ options: { scale: "0.98" }
10345
+ }]
10346
+ }
10347
+ };
10348
+ twoTonePill = defineButtonPersonality({
10349
+ id: "two-tone-pill",
10350
+ name: "Two-tone Pill",
10351
+ description: "Rounded pills with distinct solid primary and secondary brand colours.",
10352
+ tags: softPill.tags,
10353
+ buttonSystem: {
10354
+ ...softPill.buttonSystem,
10355
+ variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
10356
+ }
10357
+ });
10265
10358
  })), buttonPersonalities;
10266
10359
  var init_personalities = __esmMin((() => {
10267
10360
  init_brushed_wash();
@@ -10276,9 +10369,11 @@ var init_personalities = __esmMin((() => {
10276
10369
  init_quiet_arrow();
10277
10370
  init_showtime_pill();
10278
10371
  init_soft_pill();
10372
+ init_two_tone_pill();
10279
10373
  init_types$12();
10280
10374
  buttonPersonalities = [
10281
10375
  softPill,
10376
+ twoTonePill,
10282
10377
  earthPill,
10283
10378
  confidentChip,
10284
10379
  editorialLink,
@@ -10720,7 +10815,7 @@ function asHeaderStyleId(value) {
10720
10815
  * optional nested styling fields that would otherwise leak from another Look.
10721
10816
  */
10722
10817
  function baseHeader(theme) {
10723
- 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;
10818
+ 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;
10724
10819
  return {
10725
10820
  ...header,
10726
10821
  navContainer: {
@@ -11342,6 +11437,17 @@ var init_headerLooks = __esmMin((() => {
11342
11437
  navTypography: "brand-caps",
11343
11438
  moods: ["expressive"]
11344
11439
  },
11440
+ {
11441
+ id: asHeaderStyleId("brand-capsule"),
11442
+ label: "Brand Capsule",
11443
+ description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
11444
+ supportedLayoutIds: supportedLayouts(["classic"]),
11445
+ navInteraction: "pill-background",
11446
+ surface: "brand-solid",
11447
+ defaultDepth: "shadow",
11448
+ navTypography: "quiet-caps",
11449
+ moods: ["expressive", "professional"]
11450
+ },
11345
11451
  {
11346
11452
  id: asHeaderStyleId("serif-line"),
11347
11453
  label: "Serif Line",
@@ -11435,6 +11541,7 @@ var init_headerLooks = __esmMin((() => {
11435
11541
  "brand-bar",
11436
11542
  "brand-underline",
11437
11543
  "brand-pill",
11544
+ "brand-capsule",
11438
11545
  "serif-line",
11439
11546
  "flat-tabs"
11440
11547
  ])],
@@ -11469,6 +11576,11 @@ var init_headerLooks = __esmMin((() => {
11469
11576
  "brand-pill",
11470
11577
  "brand-bar",
11471
11578
  "minimal"
11579
+ ]), headerStyleRepairChain([
11580
+ "brand-capsule",
11581
+ "brand-pill",
11582
+ "brand-bar",
11583
+ "minimal"
11472
11584
  ]), headerStyleRepairChain([
11473
11585
  "pill-nav",
11474
11586
  "soft-bar",
@@ -14944,7 +15056,7 @@ function generateVariantCSS(variant, themeId, tokens, theme) {
14944
15056
  rules.push(`display: flex`);
14945
15057
  rules.push(`flex-direction: column`);
14946
15058
  rules.push(`position: relative`);
14947
- rules.push(`overflow: hidden`);
15059
+ rules.push(`overflow: visible`);
14948
15060
  const mediaRadius = MEDIA_CORNER_MAP[corners];
14949
15061
  const mediaRules = [`border-top-left-radius: ${mediaRadius}`, `border-top-right-radius: ${mediaRadius}`];
14950
15062
  const contentRules = [`padding: ${CONTENT_PADDING_MAP[variant.spacing] || CONTENT_PADDING_MAP.comfortable}`];
@@ -15843,7 +15955,24 @@ var init_tokenOrColor = __esmMin((() => {
15843
15955
  "white",
15844
15956
  "yellow"
15845
15957
  ]);
15846
- })), axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
15958
+ }));
15959
+ //#endregion
15960
+ //#region ../theme-core/src/schema.ts
15961
+ /**
15962
+ * Normalises the legacy `navTypography` font-role alias into the canonical
15963
+ * `navFontRole` field so persisted themes migrate at the parse boundary without
15964
+ * a data migration. `navFontRole` always wins when both are present; the legacy
15965
+ * field is dropped so we never carry a dual write forward.
15966
+ */
15967
+ function normaliseHeaderNavFontRole(header) {
15968
+ if (header.navTypography === void 0) return header;
15969
+ const { navTypography, ...rest } = header;
15970
+ return header.navFontRole === void 0 ? {
15971
+ ...rest,
15972
+ navFontRole: navTypography
15973
+ } : rest;
15974
+ }
15975
+ var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
15847
15976
  var init_schema$1 = __esmMin((() => {
15848
15977
  init_media$1();
15849
15978
  init_buttons();
@@ -16276,6 +16405,7 @@ var init_schema$1 = __esmMin((() => {
16276
16405
  "bold"
16277
16406
  ]);
16278
16407
  headerMaxWidth = z$1.enum(["container", "full"]);
16408
+ headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
16279
16409
  headerContainerSchema = z$1.object({
16280
16410
  rounded: z$1.enum([
16281
16411
  "none",
@@ -16416,6 +16546,7 @@ var init_schema$1 = __esmMin((() => {
16416
16546
  positioning: headerPositioning,
16417
16547
  shrinkOnScroll: z$1.boolean(),
16418
16548
  maxWidth: headerMaxWidth,
16549
+ barFrame: headerBarFrame.optional(),
16419
16550
  logoOverride: mediaSchema.nullable().optional(),
16420
16551
  background: headerBackgroundSchema.default({
16421
16552
  type: "color",
@@ -16425,6 +16556,7 @@ var init_schema$1 = __esmMin((() => {
16425
16556
  navStyle: headerNavStyle,
16426
16557
  navColor: themeColorTokenSchema.nullable().optional(),
16427
16558
  navWeight: navFontWeight.default("medium"),
16559
+ navFontRole: z$1.enum(["body", "heading"]).optional(),
16428
16560
  navTypography: z$1.enum(["body", "heading"]).optional(),
16429
16561
  navTextSize: navLinkStyleSchema.shape.textSize,
16430
16562
  navPlacement: z$1.enum(["end", "center"]).optional(),
@@ -16440,7 +16572,7 @@ var init_schema$1 = __esmMin((() => {
16440
16572
  ctaTreatment: headerCtaTreatmentSchema.optional(),
16441
16573
  ctaVariant: z$1.string().min(1).optional(),
16442
16574
  dropdownStyle: dropdownStyleSchema
16443
- });
16575
+ }).transform(normaliseHeaderNavFontRole);
16444
16576
  footerVariant = z$1.enum([
16445
16577
  "simple",
16446
16578
  "columns",
@@ -17492,6 +17624,7 @@ var init_curatedSiteStyles = __esmMin((() => {
17492
17624
  ],
17493
17625
  buttonPersonalityChoices: [
17494
17626
  buttonChoice("soft-pill"),
17627
+ buttonChoice("two-tone-pill"),
17495
17628
  buttonChoice("pebble"),
17496
17629
  buttonChoice("editorial-link"),
17497
17630
  buttonChoice("brushed-wash")
@@ -18671,6 +18804,7 @@ var init_curatedSiteStyles = __esmMin((() => {
18671
18804
  ],
18672
18805
  buttonPersonalityChoices: [
18673
18806
  buttonChoice("quiet-arrow"),
18807
+ buttonChoice("two-tone-pill"),
18674
18808
  buttonChoice("flat-ink"),
18675
18809
  buttonChoice("editorial-link")
18676
18810
  ],
@@ -18965,6 +19099,21 @@ var init_siteChromeBackgrounds = __esmMin((() => {
18965
19099
  quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
18966
19100
  siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
18967
19101
  }));
19102
+ /**
19103
+ * Applies the user's nav font-role/size overrides on top of a style-resolved
19104
+ * nav link style. This is where the precedence contract lands:
19105
+ *
19106
+ * - The nav typography TREATMENT (case/tracking identity: plain / heading /
19107
+ * quiet-caps / brand-caps) is ALWAYS owned by the active header style and is
19108
+ * baked into `style` before this call (see `applyNavTypography` in
19109
+ * headerLooks.ts).
19110
+ * - Each treatment resolves through a DEFAULT font role: `heading` resolves
19111
+ * through the heading role; `plain` / `quiet-caps` / `brand-caps` resolve
19112
+ * through the body role.
19113
+ * - The user's `navFontRole` (surfaced here as `preferences.typography`) only
19114
+ * overrides which font ROLE the treatment resolves through. It never changes
19115
+ * the treatment. `'inherit'` keeps the treatment's default role.
19116
+ */
18968
19117
  function mergeHeaderNavTypographyPreference(style, preferences) {
18969
19118
  return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
18970
19119
  ...style,
@@ -19564,9 +19713,12 @@ var init_responsiveTwoColumn = __esmMin((() => {
19564
19713
  //#endregion
19565
19714
  //#region ../blocks/src/system/node/fragments/styledCard.ts
19566
19715
  function styledCard(children, opts, ...mods) {
19567
- const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-hidden rb-border";
19568
- 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" });
19569
- const backgroundNodes = backgroundLayer(opts.backgroundFrom);
19716
+ const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-visible rb-border";
19717
+ const defaultBackgroundLayer = el("div", {
19718
+ className: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none rb-bg-surface",
19719
+ style: { borderRadius: "inherit" }
19720
+ });
19721
+ const backgroundNode = backgroundFrame(opts.backgroundFrom);
19570
19722
  const style = {
19571
19723
  ...opts.style ?? {},
19572
19724
  borderColor: { $bind: {
@@ -19593,7 +19745,7 @@ function styledCard(children, opts, ...mods) {
19593
19745
  ...style ? { style } : {}
19594
19746
  }, [
19595
19747
  defaultBackgroundLayer,
19596
- ...backgroundNodes,
19748
+ backgroundNode,
19597
19749
  ...children
19598
19750
  ], ...mods);
19599
19751
  }
@@ -20286,7 +20438,7 @@ var init_validation_constants = __esmMin((() => {
20286
20438
  "media.fromUrl",
20287
20439
  "background.resolveStyle",
20288
20440
  "background.resolveColorsStyle",
20289
- "background.resolveAllowOverflow",
20441
+ "background.resolveFrameClassName",
20290
20442
  "background.resolveImageStyle",
20291
20443
  "background.resolveImageClassName",
20292
20444
  "background.resolveOverlayStyle",
@@ -20322,13 +20474,13 @@ function mqDown(px) {
20322
20474
  function mqBetween(minPx, maxPx) {
20323
20475
  return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
20324
20476
  }
20325
- var BREAKPOINT_LG, BREAKPOINT_XL, BREAKPOINT_LG_DOWN, MQ_SM_UP, MQ_LG_UP, MQ_SM_DOWN, MQ_MD_DOWN, MQ_TABLET_ONLY;
20477
+ var BREAKPOINT_LG, BREAKPOINT_XL, BREAKPOINT_LG_DOWN, MQ_SM_UP, MQ_MD_UP, MQ_LG_UP, MQ_SM_DOWN, MQ_MD_DOWN, MQ_TABLET_ONLY;
20326
20478
  var init_breakpoints = __esmMin((() => {
20327
20479
  BREAKPOINT_LG = 1024;
20328
20480
  BREAKPOINT_XL = 1280;
20329
20481
  BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
20330
20482
  MQ_SM_UP = mqUp(640);
20331
- mqUp(768);
20483
+ MQ_MD_UP = mqUp(768);
20332
20484
  MQ_LG_UP = mqUp(BREAKPOINT_LG);
20333
20485
  mqUp(BREAKPOINT_XL);
20334
20486
  MQ_SM_DOWN = mqDown(639);
@@ -21663,7 +21815,7 @@ function buildTestimonialCard(...mods) {
21663
21815
  }, [stack({ gap: "md" }, [quoteMark, body]), el("div", { className: "rb-testimonial-attribution" }, buildAttributionNodes())])], {
21664
21816
  stylesFrom: "content._cardStyles",
21665
21817
  backgroundFrom: "content._cardStyles.background",
21666
- baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-hidden rb-p-8"
21818
+ baseClassName: "rb-testimonial-card rb-relative rb-isolate rb-flex rb-h-full rb-flex-col rb-overflow-visible rb-p-8"
21667
21819
  }, ...mods);
21668
21820
  }
21669
21821
  /**
@@ -22433,7 +22585,7 @@ function createFaqAccordionLayout(options = {}) {
22433
22585
  options: {
22434
22586
  axis: "all",
22435
22587
  includeSpacing: false,
22436
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
22588
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-visible"
22437
22589
  }
22438
22590
  }]
22439
22591
  },
@@ -112474,7 +112626,6 @@ function splitLayoutWith(children) {
112474
112626
  }
112475
112627
  }),
112476
112628
  renderBackgroundImage: false,
112477
- allowOverflow: true,
112478
112629
  baseClass: ""
112479
112630
  });
112480
112631
  }
@@ -113119,7 +113270,7 @@ function postCard(children, ...mods) {
113119
113270
  return styledCard(children, {
113120
113271
  stylesFrom: "content._cardStyles",
113121
113272
  backgroundFrom: "content._cardStyles.background",
113122
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-flex rb-flex-col rb-h-full"
113273
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-flex rb-flex-col rb-h-full"
113123
113274
  }, ...mods);
113124
113275
  }
113125
113276
  const gridPostCard = postCard([postImageLink("rb-h-48 rb-w-full rb-object-cover rb-transition-transform rb-hover-scale-105", {
@@ -113155,7 +113306,7 @@ const stackPostCard = styledCard([inline({
113155
113306
  ])])], {
113156
113307
  stylesFrom: "content._cardStyles",
113157
113308
  backgroundFrom: "content._cardStyles.background",
113158
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border"
113309
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border"
113159
113310
  }, repeat("data.posts", "post"));
113160
113311
  const emptyState$2 = {
113161
113312
  ...styledCard([text({
@@ -113164,7 +113315,7 @@ const emptyState$2 = {
113164
113315
  }, bind("content.emptyMessage", { fallback: "No posts published yet." }))], {
113165
113316
  stylesFrom: "content._cardStyles",
113166
113317
  backgroundFrom: "content._cardStyles.background",
113167
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden rb-border rb-border-dashed rb-p-8 rb-text-center"
113318
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible rb-border rb-border-dashed rb-p-8 rb-text-center"
113168
113319
  }),
113169
113320
  $when: {
113170
113321
  when: { from: "data.posts[0]" },
@@ -113174,7 +113325,7 @@ const emptyState$2 = {
113174
113325
  function blogListingShell(children) {
113175
113326
  return styledSection({
113176
113327
  children: styledContainer({
113177
- baseClassName: "rb-relative rb-isolate rb-overflow-hidden",
113328
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
113178
113329
  children
113179
113330
  }),
113180
113331
  baseClass: ""
@@ -113440,7 +113591,7 @@ const copyLayout = fragmentLayoutNode$1(formCopyFragment.layout);
113440
113591
  const formSurface = styledContainer({
113441
113592
  bindFrom: "_containerStyles",
113442
113593
  constrainWidth: false,
113443
- baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
113594
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-visible",
113444
113595
  children: fragmentLayoutNode$1(formEmbedFragment.layout)
113445
113596
  });
113446
113597
  function createFormLayout(variant) {
@@ -114739,6 +114890,7 @@ const headerRootClassTransform = {
114739
114890
  ];
114740
114891
  const variant = header?.variant;
114741
114892
  if (variant && VALID_VARIANTS.includes(variant)) classes.push(`header-variant-${variant}`);
114893
+ if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
114742
114894
  return joinClasses$1(classes);
114743
114895
  }
114744
114896
  };
@@ -115273,7 +115425,7 @@ init_builder$2();
115273
115425
  init_fragments$1();
115274
115426
  init_defineBlock();
115275
115427
  init_colorStyles();
115276
- const whenTransformed$1 = (from, transformId, equals = true) => (node) => ({
115428
+ const whenTransformed = (from, transformId, equals = true) => (node) => ({
115277
115429
  ...node,
115278
115430
  $when: {
115279
115431
  when: {
@@ -115301,7 +115453,7 @@ const logoRow = link({
115301
115453
  text({
115302
115454
  as: "strong",
115303
115455
  className: "header-logo-text rb-truncate"
115304
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
115456
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
115305
115457
  ]);
115306
115458
  const centeredLogoRow = link({
115307
115459
  href: "/",
@@ -115321,7 +115473,7 @@ const centeredLogoRow = link({
115321
115473
  text({
115322
115474
  as: "strong",
115323
115475
  className: "header-logo-text"
115324
- }, whenTransformed$1("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
115476
+ }, whenTransformed("$root.theme.header.logo", "layout.headerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
115325
115477
  ]);
115326
115478
  const createNavRow = (className, align = "end") => navRow({
115327
115479
  className: `${className} header-nav-row`,
@@ -115453,7 +115605,7 @@ const classicLayout = inline({
115453
115605
  logoRow,
115454
115606
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
115455
115607
  headerCta
115456
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "inline"));
115608
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
115457
115609
  const classicCenteredNavLayout = inline({
115458
115610
  className: bindProp("$root.theme.header.maxWidth", {
115459
115611
  transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
@@ -115464,7 +115616,7 @@ const classicCenteredNavLayout = inline({
115464
115616
  logoRow,
115465
115617
  createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
115466
115618
  headerCta
115467
- ], whenTransformed$1("$root.theme.header", "layout.classicNavMode", "centered"));
115619
+ ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
115468
115620
  const centeredLayout = stack({
115469
115621
  gap: "md",
115470
115622
  align: "center",
@@ -115527,7 +115679,6 @@ const siteHeaderManifest = createBlockManifest({
115527
115679
  transforms: pipe(tx("layout.headerSectionBackground")),
115528
115680
  fallback: "background"
115529
115681
  }),
115530
- allowOverflow: true,
115531
115682
  className: bindProp("$root.theme.header", {
115532
115683
  transforms: pipe(tx("layout.headerRootClass")),
115533
115684
  fallback: "header-root rb-z-40 rb-w-full transition-theme"
@@ -115554,6 +115705,7 @@ const siteHeaderBlockDefinition = { manifest: siteHeaderManifest };
115554
115705
  //#region ../blocks/src/system/blocks/site-footer-nav-groups-layout.ts
115555
115706
  init_builder$2();
115556
115707
  init_colorStyles();
115708
+ init_footerNav();
115557
115709
  const footerNavGroupsLayout = stack({
115558
115710
  gap: "lg",
115559
115711
  align: "start",
@@ -115580,225 +115732,160 @@ const footerNavGroupsLayout = stack({
115580
115732
  linkRequired: true,
115581
115733
  target: { $bind: { from: "entry.target" } },
115582
115734
  rel: { $bind: { from: "entry.rel" } }
115583
- }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], when("footerMenu.groups"));
115735
+ }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
115584
115736
  //#endregion
115585
115737
  //#region ../blocks/src/system/blocks/site-footer.ts
115586
115738
  init_fragments$1();
115587
115739
  init_builder$2();
115588
- init_fragments();
115589
115740
  init_defineBlock();
115590
115741
  init_colorStyles();
115591
115742
  init_surfaces();
115592
- const footerTextLayout = () => materializeFragment({ fragment: footerBottomTextFragment }).layout;
115593
- const whenTransformed = (from, transformId, equals = true) => (node) => ({
115594
- ...node,
115595
- $when: {
115596
- when: {
115597
- from,
115598
- transforms: [{ id: transformId }]
115599
- },
115600
- equals
115601
- }
115602
- });
115603
- const bottomBarTextLayout = () => {
115604
- const bottomTextNode = footerTextLayout()[1];
115605
- return bottomTextNode ? [bottomTextNode] : [];
115606
- };
115607
- const bodyTextLayout = () => {
115608
- const bodyTextNode = footerTextLayout()[0];
115609
- return bodyTextNode ? [bodyTextNode] : [];
115610
- };
115611
- const businessAddressLayout = () => [text({
115612
- as: "p",
115613
- className: "rb-caption rb-opacity-80"
115614
- }, bind("site.businessAddress.displayAddress"), when("content.showBusinessAddress", { equals: true }))];
115615
- const inlineBottomTextLayout = () => {
115616
- const bottomTextNode = footerTextLayout()[1];
115617
- if (!bottomTextNode) return [];
115618
- return [when("$root.theme.footer.bottomBar.enabled", {
115619
- equals: true,
115620
- not: true
115621
- })(bottomTextNode)];
115622
- };
115623
- const simpleFooterLogo = link({
115743
+ const brandLogo = link({
115624
115744
  href: "/",
115625
115745
  className: { $bind: {
115626
115746
  from: "$root.theme.footer.logo",
115627
115747
  transforms: [{
115628
115748
  id: "layout.footerLogoClass",
115629
- options: { requireExplicitShow: true }
115749
+ options: { base: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline" }
115630
115750
  }],
115631
- fallback: "rb-hidden"
115751
+ fallback: "footer-logo rb-inline-flex rb-items-center rb-gap-3 rb-no-underline"
115632
115752
  } }
115633
- }, [
115634
- media({ className: { $bind: {
115635
- from: "$root.theme.footer.logo",
115636
- transforms: [{ id: "layout.footerLogoMediaClass" }],
115637
- fallback: "rb-w-auto"
115638
- } } }, when("content.logo"), bind("content.logo")),
115639
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
115640
- from: "$root.theme.footer.logo",
115641
- transforms: [{ id: "layout.footerLogoMediaClass" }],
115642
- fallback: "rb-w-auto"
115643
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
115644
- text({
115645
- as: "strong",
115646
- className: "footer-logo-text rb-nav-text"
115647
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
115648
- ]);
115649
- const simpleFooterLayout = stack({
115753
+ }, [media({ className: { $bind: {
115754
+ from: "$root.theme.footer.logo",
115755
+ transforms: [{
115756
+ id: "layout.footerLogoMediaClass",
115757
+ options: { base: "rb-h-10 rb-w-auto" }
115758
+ }],
115759
+ fallback: "rb-h-10 rb-w-auto"
115760
+ } } }, when("module.showLogo", { equals: true }), when("content.logo"), bind("content.logo")), text({
115761
+ as: "strong",
115762
+ className: "footer-logo-text rb-nav-text"
115763
+ }, when("module.showTitle", { equals: true }), bind("site.title", { fallback: "Your Site" }))], when("module.kind", { equals: "brand" }));
115764
+ const navigation = stack({
115650
115765
  gap: "md",
115651
- align: "start",
115766
+ className: "rb-w-full"
115767
+ }, [footerNavGroupsLayout, footerNav({
115768
+ collectionPath: "footerMenu.items",
115769
+ mode: "links-only",
115652
115770
  className: { $bind: {
115653
- from: "$root.theme.footer",
115654
- transforms: [{ id: "layout.footerSimpleRootClass" }],
115655
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-items-start rb-gap-4 rb-py-10 rb-text-left"
115656
- } }
115657
- }, [
115658
- simpleFooterLogo,
115659
- footerNav({
115660
- collectionPath: "footerMenu.items",
115661
- mode: "flatten",
115662
- className: { $bind: {
115663
- from: "$root.theme.footer.navLayout",
115664
- transforms: [{ id: "layout.footerSimpleNavClass" }],
115665
- fallback: "footer-nav rb-flex rb-flex-wrap rb-justify-start rb-gap-x-6 rb-gap-y-3"
115666
- } },
115667
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
115668
- }),
115669
- ...bodyTextLayout(),
115670
- ...businessAddressLayout(),
115671
- ...inlineBottomTextLayout()
115672
- ], when("$root.theme.footer.variant", { equals: "simple" }));
115673
- const columnsFooterLayout = stack({
115674
- gap: "xl",
115675
- align: "start",
115676
- className: { $bind: {
115677
- from: "$root.theme.footer.maxWidth",
115678
- transforms: [{
115679
- id: "layout.maxWidthClass",
115680
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
115681
- }],
115682
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
115683
- } }
115684
- }, [
115685
- footerNavGroupsLayout,
115686
- inline({ className: "rb-flex rb-w-full rb-flex-wrap rb-items-center rb-justify-between rb-gap-4" }, [text({
115687
- as: "strong",
115688
- className: "rb-block rb-nav-text",
115689
- style: textColorStyle("text")
115690
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" })), footerNav({
115691
- collectionPath: "footerMenu.items",
115692
- mode: "links-only",
115693
- className: "rb-flex rb-flex-wrap rb-justify-end rb-gap-x-6 rb-gap-y-3",
115694
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-px-4 rb-py-2 rb-nav-text transition-theme-standard"
115695
- })]),
115696
- ...bodyTextLayout(),
115697
- ...businessAddressLayout(),
115698
- ...inlineBottomTextLayout()
115699
- ], when("$root.theme.footer.variant", { equals: "columns" }));
115700
- const splitFooterLayout = stack({
115701
- gap: "xl",
115771
+ from: "module.navigationClassName",
115772
+ fallback: "footer-nav rb-flex rb-flex-wrap rb-gap-x-6 rb-gap-y-3"
115773
+ } },
115774
+ linkClassName: "footer-nav-link rb-nav-text transition-theme-standard"
115775
+ })], when("module.kind", { equals: "navigation" }));
115776
+ const legalNavigation = footerNav({
115777
+ collectionPath: "legalFooterMenu.items",
115778
+ mode: "links-only",
115779
+ className: "rb-flex rb-flex-wrap rb-gap-x-4 rb-gap-y-2",
115780
+ linkClassName: "footer-nav-link rb-caption transition-theme-standard"
115781
+ });
115782
+ const address = text({
115783
+ as: "address",
115784
+ className: "rb-not-italic rb-opacity-80"
115785
+ }, when("module.kind", { equals: "business-address" }), bind("module.address"));
115786
+ const contact = stack({
115787
+ gap: "sm",
115788
+ className: "rb-items-start"
115789
+ }, [link({
115790
+ href: { $bind: { from: "contactLink.href" } },
115791
+ className: "rb-nav-text rb-break-words transition-theme-standard"
115792
+ }, [text({ as: "span" }, bind("contactLink.label"))], repeat("module.contactLinks", "contactLink"))], when("module.kind", { equals: "contact" }));
115793
+ const hours = stack({
115794
+ gap: "sm",
115795
+ className: "rb-w-full"
115796
+ }, [inline({ className: "rb-flex rb-w-full rb-justify-between rb-gap-4" }, [text({
115797
+ as: "span",
115798
+ className: "rb-label"
115799
+ }, bind("hoursDay.weekday")), text({
115800
+ as: "span",
115801
+ className: "rb-caption rb-opacity-80"
115802
+ }, bind("hoursDay.hours"))], repeat("module.openingHours", "hoursDay")), text({
115803
+ as: "p",
115804
+ className: "rb-caption rb-opacity-70"
115805
+ }, bind("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
115806
+ const socials = inline({ className: "rb-flex rb-flex-wrap rb-gap-x-5 rb-gap-y-3" }, [link({
115807
+ href: { $bind: { from: "social.href" } },
115808
+ target: "_blank",
115809
+ rel: "noreferrer noopener",
115810
+ "aria-label": { $bind: { from: "social.label" } },
115811
+ className: "rb-nav-text transition-theme-standard"
115812
+ }, [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" }));
115813
+ const authoredCopy = richText({
115814
+ className: "rb-prose rb-prose-sm rb-max-w-none",
115815
+ style: textColorStyle("text/80")
115816
+ }, when("module.content"), bind("module.content", { transforms: [{
115817
+ id: "content.interpolateRichTextTokens",
115818
+ options: { tokens: ["year", "site_name"] }
115819
+ }] }));
115820
+ const footerModule = stack({
115821
+ gap: "md",
115702
115822
  align: "start",
115703
- className: { $bind: {
115704
- from: "$root.theme.footer.maxWidth",
115705
- transforms: [{
115706
- id: "layout.maxWidthClass",
115707
- options: { base: "rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12" }
115708
- }],
115709
- fallback: "rb-container rb-flex rb-w-full rb-flex-col rb-gap-10 rb-py-12"
115710
- } }
115823
+ "data-preview-footer-module-id": { $bind: { from: "module.id" } }
115711
115824
  }, [
115712
- inline({ className: { $bind: {
115713
- from: "$root.theme.footer.logo",
115714
- transforms: [{ id: "layout.footerSplitMainClass" }],
115715
- 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"
115716
- } } }, [stack({}, [footerNav({
115717
- collectionPath: "footerMenu.items",
115718
- mode: "flatten",
115719
- className: { $bind: {
115720
- from: "$root.theme.footer.navLayout",
115721
- transforms: [{ id: "layout.footerSplitNavSingleClass" }],
115722
- fallback: "rb-w-full rb-space-y-3 rb-text-left"
115723
- } },
115724
- linkClassName: "footer-nav-link rb-inline-flex rb-items-center rb-whitespace-nowrap rb-nav-text transition-theme-standard"
115725
- })]), link({
115726
- href: "/",
115727
- className: { $bind: {
115728
- from: "$root.theme.footer.logo",
115729
- transforms: [{ id: "layout.footerLogoClass" }],
115730
- 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"
115731
- } }
115732
- }, [
115733
- media({ className: { $bind: {
115734
- from: "$root.theme.footer.logo",
115735
- transforms: [{ id: "layout.footerLogoMediaClass" }],
115736
- fallback: "rb-w-auto"
115737
- } } }, when("content.logo"), bind("content.logo")),
115738
- stack({ className: "rb-contents" }, [media({ className: { $bind: {
115739
- from: "$root.theme.footer.logo",
115740
- transforms: [{ id: "layout.footerLogoMediaClass" }],
115741
- fallback: "rb-w-auto"
115742
- } } }, when("site.logo"), bind("site.logo"))], when("content.logo", { not: true })),
115743
- text({
115744
- as: "strong",
115745
- className: "footer-logo-text rb-nav-text"
115746
- }, whenTransformed("$root.theme.footer", "layout.footerLogoTextVisible"), bind("site.title", { fallback: "Your Site" }))
115747
- ])]),
115748
- ...businessAddressLayout(),
115749
- ...inlineBottomTextLayout()
115750
- ], when("$root.theme.footer.variant", { equals: "split" }));
115751
- const footerLayout = section$1({
115752
- background: "background",
115825
+ text({
115826
+ as: "h2",
115827
+ className: "rb-label",
115828
+ style: textColorStyle("text/70")
115829
+ }, bind("module.heading"), when("module.heading")),
115830
+ brandLogo,
115831
+ navigation,
115832
+ stack({
115833
+ gap: "sm",
115834
+ className: "rb-w-full"
115835
+ }, [legalNavigation], when("module.kind", { equals: "legal-navigation" })),
115836
+ address,
115837
+ contact,
115838
+ hours,
115839
+ socials,
115840
+ stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
115841
+ stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
115842
+ ], repeat("group.modules", "module"));
115843
+ const footerGroup = stack({
115844
+ gap: "md",
115845
+ align: "stretch",
115846
+ className: "rb-min-w-0",
115847
+ "data-footer-group": { $bind: { from: "group.kind" } }
115848
+ }, [footerModule], repeat("region.groups", "group"));
115849
+ const footerMainRegion = stack({
115850
+ className: { $bind: { from: "region.className" } },
115851
+ "data-footer-region": { $bind: { from: "region.kind" } }
115852
+ }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
115853
+ const footerBottomRegion = stack({ className: { $bind: {
115854
+ from: "$root.theme.footer",
115855
+ transforms: [{ id: "layout.footerBottomBarContainerClass" }],
115856
+ fallback: "rb-w-full"
115857
+ } } }, [stack({
115753
115858
  className: { $bind: {
115754
115859
  from: "$root.theme.footer",
115755
- transforms: [{ id: "layout.footerRootClass" }],
115756
- fallback: "rb-w-full rb-border-t transition-theme"
115860
+ transforms: [{ id: "layout.footerBottomBarClass" }],
115861
+ fallback: "rb-w-full rb-border-t rb-px-6 rb-py-6 rb-text-center"
115757
115862
  } },
115758
115863
  style: { $bind: {
115759
115864
  from: "$root.theme.footer",
115760
- transforms: [{ id: "layout.footerRootStyle" }],
115761
- fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
115762
- } }
115763
- }, [
115764
- simpleFooterLayout,
115765
- columnsFooterLayout,
115766
- splitFooterLayout,
115767
- stack({
115768
- className: { $bind: {
115769
- from: "$root.theme.footer",
115770
- transforms: [{ id: "layout.footerBottomBarClass" }],
115771
- fallback: "rb-w-full rb-border-t rb-py-5"
115772
- } },
115773
- style: { $bind: {
115774
- from: "$root.theme.footer",
115775
- transforms: [{ id: "layout.footerBottomBarStyle" }]
115776
- } }
115777
- }, [stack({ className: { $bind: {
115778
- from: "$root.theme.footer",
115779
- transforms: [{ id: "layout.footerBottomBarContainerClass" }],
115780
- fallback: "rb-container"
115781
- } } }, [...bottomBarTextLayout()])], when("$root.theme.footer.bottomBar.enabled", { equals: true }))
115782
- ]);
115865
+ transforms: [{ id: "layout.footerBottomBarStyle" }]
115866
+ } },
115867
+ "data-footer-region": "bottom"
115868
+ }, [footerGroup])], when("region.kind", { equals: "bottom" }), repeat("content.footerRuntime.regions", "region"));
115783
115869
  const siteFooterManifest = createBlockManifest({
115784
115870
  id: "block.site-footer",
115785
115871
  title: "Site Footer",
115786
115872
  category: "layout",
115787
- fragments: [{
115788
- fragment: footerBottomTextFragment,
115789
- fieldPriority: 0
115790
- }],
115791
115873
  skipSectionStyles: true,
115792
- additionalFields: [{
115793
- id: "showBusinessAddress",
115794
- type: "boolean",
115795
- label: "Add business address to site footer?",
115796
- required: false,
115797
- defaultValue: false,
115798
- ui: { intent: "content" }
115799
- }],
115800
- layout: footerLayout,
115801
- description: "Site-wide footer with navigation links and optional columns.",
115874
+ layout: section$1({
115875
+ background: "background",
115876
+ className: { $bind: {
115877
+ from: "$root.theme.footer",
115878
+ transforms: [{ id: "layout.footerRootClass" }],
115879
+ fallback: "rb-w-full rb-border-t transition-theme"
115880
+ } },
115881
+ style: { $bind: {
115882
+ from: "$root.theme.footer",
115883
+ transforms: [{ id: "layout.footerRootStyle" }],
115884
+ fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
115885
+ } },
115886
+ "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
115887
+ }, [footerMainRegion, footerBottomRegion]),
115888
+ description: "Site-wide composed footer with canonical shared details.",
115802
115889
  styleTokens: { spacing: "md" },
115803
115890
  paletteHidden: true
115804
115891
  });
@@ -116299,7 +116386,7 @@ const repeatedItemsNode = repeaterFragmentLayout({
116299
116386
  id: "boxStyles.all",
116300
116387
  options: {
116301
116388
  axis: "all",
116302
- baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-hidden rb-border"
116389
+ baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
116303
116390
  }
116304
116391
  }]
116305
116392
  },
@@ -125359,16 +125446,17 @@ const backgroundTransforms = [
125359
125446
  run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
125360
125447
  },
125361
125448
  {
125362
- id: "background.resolveAllowOverflow",
125449
+ id: "background.resolveFrameClassName",
125363
125450
  kind: "formatter",
125364
- summary: "Resolve allowOverflow from background config (explicit overflow or scaled image)",
125365
- run: (value) => {
125366
- if (!value || typeof value !== "object") return false;
125451
+ summary: "Resolve clipping on a decorative background frame without clipping foreground content",
125452
+ run: (value, options) => {
125453
+ const baseClass = options?.baseClass?.trim() ?? "";
125454
+ if (!value || typeof value !== "object") return `${baseClass} rb-overflow-hidden`.trim();
125367
125455
  const input = value;
125368
- if (input.overflow === true) return true;
125456
+ if (input.overflow === true) return `${baseClass} rb-overflow-visible`.trim();
125369
125457
  const objectFit = isString$1(input.objectFit) ? input.objectFit.trim() : null;
125370
125458
  const scale = isString$1(input.scale) ? input.scale.trim() : isNumber$1(input.scale) ? String(input.scale) : null;
125371
- return Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0);
125459
+ return `${baseClass} ${Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0) ? "rb-overflow-visible" : "rb-overflow-hidden"}`.trim();
125372
125460
  }
125373
125461
  },
125374
125462
  {
@@ -125929,10 +126017,10 @@ function isRecord$15(value) {
125929
126017
  //#region ../blocks/src/primitives/layout/Section.tsx
125930
126018
  init_clsx();
125931
126019
  init_colorStyles();
125932
- const Section = forwardRef(function Section({ as: Comp = "section", children, background, className = "", allowOverflow = false, style, "data-slot": dataSlot }, ref) {
126020
+ const Section = forwardRef(function Section({ as: Comp = "section", children, background, className = "", style, "data-slot": dataSlot }, ref) {
125933
126021
  return /* @__PURE__ */ jsx(Comp, {
125934
126022
  ref,
125935
- className: clsx("rb-relative rb-isolate", allowOverflow ? "rb-overflow-visible" : "rb-overflow-hidden", className),
126023
+ className: clsx("rb-relative rb-isolate rb-overflow-visible", className),
125936
126024
  style: mergeStyles(typeof background === "string" && background.trim().length > 0 ? backgroundColorStyle(background.trim()) : void 0, style),
125937
126025
  "data-slot": dataSlot ?? "section",
125938
126026
  children
@@ -126056,10 +126144,7 @@ function Grid({ as: Comp = "div", cols = {
126056
126144
  }
126057
126145
  //#endregion
126058
126146
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
126059
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
126060
- ...props,
126061
- allowOverflow
126062
- });
126147
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Section, { ...props });
126063
126148
  const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
126064
126149
  const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
126065
126150
  const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
@@ -126069,6 +126154,28 @@ const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _b
126069
126154
  //#region ../path-utils/src/index.ts
126070
126155
  const PATH_SEPARATOR_REGEX$1 = /\./g;
126071
126156
  const BRACKET_ACCESS_REGEX$1 = /\[([^\]]+)\]/g;
126157
+ /**
126158
+ * Segments that would traverse or mutate the prototype chain.
126159
+ *
126160
+ * `setAtPath` creates nested objects along the path, so allowing these
126161
+ * segments is a prototype-pollution vector. They are rejected everywhere a
126162
+ * path is parsed (string or pre-parsed array form) — fail closed.
126163
+ */
126164
+ const UNSAFE_PATH_SEGMENTS = /* @__PURE__ */ new Set([
126165
+ "__proto__",
126166
+ "constructor",
126167
+ "prototype"
126168
+ ]);
126169
+ var UnsafePathSegmentError = class extends Error {
126170
+ constructor(segment) {
126171
+ super(`Unsafe path segment: "${segment}"`);
126172
+ this.name = "UnsafePathSegmentError";
126173
+ this.segment = segment;
126174
+ }
126175
+ };
126176
+ function assertSafePathSegments(segments) {
126177
+ for (const segment of segments) if (typeof segment === "string" && UNSAFE_PATH_SEGMENTS.has(segment)) throw new UnsafePathSegmentError(segment);
126178
+ }
126072
126179
  function isRecord$14(value) {
126073
126180
  return typeof value === "object" && value !== null && !Array.isArray(value);
126074
126181
  }
@@ -126080,7 +126187,10 @@ function getContainerValue(container, segment) {
126080
126187
  if (segment in container) return Reflect.get(container, segment);
126081
126188
  }
126082
126189
  function parsePath(path) {
126083
- if (Array.isArray(path)) return path;
126190
+ if (Array.isArray(path)) {
126191
+ assertSafePathSegments(path);
126192
+ return path;
126193
+ }
126084
126194
  const segments = [];
126085
126195
  const parts = path.split(PATH_SEPARATOR_REGEX$1);
126086
126196
  for (const raw of parts) {
@@ -126100,6 +126210,7 @@ function parsePath(path) {
126100
126210
  }
126101
126211
  if (baseMatch === null && !raw.includes("[")) segments.push(raw);
126102
126212
  }
126213
+ assertSafePathSegments(segments);
126103
126214
  return segments;
126104
126215
  }
126105
126216
  function getAtPath(source, path) {
@@ -126186,6 +126297,59 @@ function getCtaIconComponent(name) {
126186
126297
  return CTA_ICON_COMPONENTS[name] ?? null;
126187
126298
  }
126188
126299
  //#endregion
126300
+ //#region ../blocks/src/system/icons/social.tsx
126301
+ init_svg();
126302
+ const SOCIAL_ICON_NAMES = [
126303
+ "SocialFacebook",
126304
+ "SocialInstagram",
126305
+ "SocialLinkedIn",
126306
+ "SocialTikTok",
126307
+ "SocialX",
126308
+ "SocialYouTube"
126309
+ ];
126310
+ const socialIcons = {
126311
+ SocialFacebook: createIcon("SocialFacebookIcon", /* @__PURE__ */ jsx("path", { d: "M14 8h3V4h-3c-3 0-5 2-5 5v3H6v4h3v6h4v-6h3l1-4h-4V9c0-.7.3-1 1-1Z" })),
126312
+ SocialInstagram: createIcon("SocialInstagramIcon", /* @__PURE__ */ jsxs(Fragment, { children: [
126313
+ /* @__PURE__ */ jsx("rect", {
126314
+ x: "3",
126315
+ y: "3",
126316
+ width: "18",
126317
+ height: "18",
126318
+ rx: "5"
126319
+ }),
126320
+ /* @__PURE__ */ jsx("circle", {
126321
+ cx: "12",
126322
+ cy: "12",
126323
+ r: "4"
126324
+ }),
126325
+ /* @__PURE__ */ jsx("circle", {
126326
+ cx: "17.5",
126327
+ cy: "6.5",
126328
+ r: ".75",
126329
+ fill: "currentColor",
126330
+ stroke: "none"
126331
+ })
126332
+ ] })),
126333
+ SocialLinkedIn: createIcon("SocialLinkedInIcon", /* @__PURE__ */ jsxs(Fragment, { children: [
126334
+ /* @__PURE__ */ jsx("path", { d: "M6 9v10" }),
126335
+ /* @__PURE__ */ jsx("path", {
126336
+ d: "M6 5.5v.01",
126337
+ strokeWidth: "3"
126338
+ }),
126339
+ /* @__PURE__ */ jsx("path", { d: "M10.5 19v-6a4 4 0 0 1 8 0v6" }),
126340
+ /* @__PURE__ */ jsx("path", { d: "M10.5 9v10" })
126341
+ ] })),
126342
+ SocialTikTok: createIcon("SocialTikTokIcon", /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "M14 4v11.5a4.5 4.5 0 1 1-4-4.47" }), /* @__PURE__ */ jsx("path", { d: "M14 4c.7 3 2.4 4.5 5 4.5" })] })),
126343
+ SocialX: createIcon("SocialXIcon", /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "m5 4 14 16" }), /* @__PURE__ */ jsx("path", { d: "M19 4 5 20" })] })),
126344
+ SocialYouTube: createIcon("SocialYouTubeIcon", /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("path", { d: "M21 12c0 3.5-.5 5.5-1.3 6.3S16.5 19.5 12 19.5s-6.9-.4-7.7-1.2S3 15.5 3 12s.5-5.5 1.3-6.3S7.5 4.5 12 4.5s6.9.4 7.7 1.2S21 8.5 21 12Z" }), /* @__PURE__ */ jsx("path", { d: "m10 9 5 3-5 3Z" })] }))
126345
+ };
126346
+ function isSocialIconName(value) {
126347
+ return typeof value === "string" && SOCIAL_ICON_NAMES.includes(value);
126348
+ }
126349
+ function getSocialIconComponent(value) {
126350
+ return isSocialIconName(value) ? socialIcons[value] : null;
126351
+ }
126352
+ //#endregion
126189
126353
  //#region ../blocks/src/system/icons/registry.ts
126190
126354
  init_presets();
126191
126355
  function buildSearchText(parts) {
@@ -126216,7 +126380,7 @@ function semanticOptionsForPreset(preset) {
126216
126380
  }
126217
126381
  semanticOptionsForPreset("feature");
126218
126382
  function getIconComponent(name) {
126219
- return getCtaIconComponent(name) ?? getSemanticIconComponent(name);
126383
+ return getCtaIconComponent(name) ?? getSemanticIconComponent(name) ?? getSocialIconComponent(name);
126220
126384
  }
126221
126385
  //#endregion
126222
126386
  //#region ../blocks/src/system/runtime/nodes/buttonAffordance.ts
@@ -126981,7 +127145,6 @@ const HeaderSectionNode = ({ blockId, children, className, "data-preview-site-ch
126981
127145
  const asProp = rest.as;
126982
127146
  const styleProp = rest.style;
126983
127147
  const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
126984
- const allowOverflowProp = typeof rest.allowOverflow === "boolean" ? rest.allowOverflow : void 0;
126985
127148
  const dataSlotProp = typeof rest["data-slot"] === "string" ? rest["data-slot"] : void 0;
126986
127149
  return /* @__PURE__ */ jsxs("nav", {
126987
127150
  ...getIslandRootProps("headerSection", blockId),
@@ -126996,7 +127159,6 @@ const HeaderSectionNode = ({ blockId, children, className, "data-preview-site-ch
126996
127159
  as: asProp,
126997
127160
  style: styleProp,
126998
127161
  background: backgroundProp ?? "background",
126999
- allowOverflow: allowOverflowProp,
127000
127162
  "data-slot": dataSlotProp,
127001
127163
  className: sectionClasses || void 0,
127002
127164
  children
@@ -128322,7 +128484,7 @@ function resolveGroupFrame(cardStyles) {
128322
128484
  contentClassName: "offerings-preview-card-content rb-flex rb-h-full rb-min-h-full rb-flex-col rb-gap-5"
128323
128485
  };
128324
128486
  return {
128325
- containerClassName: ["offerings-preview-card offerings-preview-card--framed rb-relative rb-isolate rb-h-full rb-min-h-full rb-overflow-hidden rb-bg-surface rb-border rb-border-border", resolveGroupFrameClasses(cardStyles)].filter(Boolean).join(" "),
128487
+ containerClassName: ["offerings-preview-card offerings-preview-card--framed rb-relative rb-isolate rb-h-full rb-min-h-full rb-overflow-visible rb-bg-surface rb-border rb-border-border", resolveGroupFrameClasses(cardStyles)].filter(Boolean).join(" "),
128326
128488
  containerStyle: resolveGroupFrameStyle(cardStyles),
128327
128489
  contentClassName: "card-content offerings-preview-card-content rb-flex rb-h-full rb-min-h-full rb-flex-col rb-gap-5"
128328
128490
  };
@@ -130650,9 +130812,9 @@ function isReactNode(value) {
130650
130812
  * Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.
130651
130813
  */
130652
130814
  function resolveNode(node, context, indexFallback) {
130653
- if (!shouldRenderNode(node, context)) return null;
130654
130815
  const scopeContext = applyScopes(node, context);
130655
130816
  if (node.$repeat) return resolveRepeater(node, scopeContext);
130817
+ if (!shouldRenderNode(node, scopeContext)) return null;
130656
130818
  const registry = scopeContext.registry ?? serverComponentRegistry;
130657
130819
  const normalizedType = node.type.toLowerCase();
130658
130820
  const component = registry[node.type] ?? registry[normalizedType] ?? (normalizedType === "section" ? SectionNode : void 0);
@@ -132133,6 +132295,19 @@ init_breakpoints();
132133
132295
  init_navDropdownSizing();
132134
132296
  const HEADER_BLUR = "blur(12px)";
132135
132297
  const FLOATING_BLUR = "blur(16px)";
132298
+ const INSET_SHELL_MARKER_CLASS = "header-bar-frame-inset-shell";
132299
+ const INSET_SHELL_EDGE = "1rem";
132300
+ const INSET_SHELL_INSET_BLOCK = "0.875rem";
132301
+ const INSET_SHELL_RADIUS = "9999px";
132302
+ const INSET_SHELL_CONTAINER_MAX = "80rem";
132303
+ const INSET_SHELL_INTERIOR_PADDING_X = "1.75rem";
132304
+ /**
132305
+ * Whether the classic header should render as an inset "brand capsule" shell.
132306
+ * The facet is only meaningful for the classic layout; other variants ignore it.
132307
+ */
132308
+ function usesInsetShell(header) {
132309
+ return header.barFrame === "inset-shell" && header.variant === "classic";
132310
+ }
132136
132311
  /**
132137
132312
  * Generate complete CSS for header system from theme config
132138
132313
  *
@@ -132232,7 +132407,36 @@ function generateHeaderRootStyles(header, themeId, tokens, _theme) {
132232
132407
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
132233
132408
  const overlayFix = `\n${`${selector}:has([data-nav-mobile-overlay][aria-hidden="false"])`} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
132234
132409
  if (isContainedNav || backgroundRules.length === 0) return `${baseBlock}\n${overlayFix}`;
132235
- return `${baseBlock}\n${`\n${backgroundSelector} {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border-radius: inherit;\n z-index: -1;\n ${backgroundRules.join("\n ")}\n}\n`}\n${overlayFix}`;
132410
+ return `${baseBlock}\n${`\n${backgroundSelector} {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border-radius: inherit;\n z-index: -1;\n ${backgroundRules.join("\n ")}\n}\n`}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}`;
132411
+ }
132412
+ /**
132413
+ * Reshapes the full-bleed header paint layer into a contained brand capsule at
132414
+ * the desktop breakpoint. The capsule is centred, capped to the page container
132415
+ * width, inset from the top, fully rounded, and carries the header depth so it
132416
+ * reads as a floating pill. Root border/shadow are neutralised on desktop so a
132417
+ * bordered style does not leave a full-width hairline around the capsule. Sticky
132418
+ * positioning is unaffected — the root stays full width and sticky while the
132419
+ * ::before paint provides the capsule.
132420
+ */
132421
+ function generateInsetShellStyles(header, themeId) {
132422
+ const scope = `:where([data-theme-scope="${themeId}"])`;
132423
+ const shellRootSelector = `${scope} .header-root.${INSET_SHELL_MARKER_CLASS}`;
132424
+ const shellBeforeSelector = `${scope} .header-root.${INSET_SHELL_MARKER_CLASS}::before`;
132425
+ const layoutSelector = `${scope} .header-root.${INSET_SHELL_MARKER_CLASS} .rb-header-layout`;
132426
+ const widthValue = header.maxWidth === "full" ? `calc(100% - (${INSET_SHELL_EDGE} * 2))` : `min(${INSET_SHELL_CONTAINER_MAX}, calc(100% - (${INSET_SHELL_EDGE} * 2)))`;
132427
+ const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
132428
+ const rootRules = ["border: none;", "box-shadow: none;"];
132429
+ const beforeRules = [
132430
+ `inset: ${INSET_SHELL_INSET_BLOCK} auto;`,
132431
+ "left: 50%;",
132432
+ "right: auto;",
132433
+ "transform: translateX(-50%);",
132434
+ `width: ${widthValue};`,
132435
+ `border-radius: ${INSET_SHELL_RADIUS};`,
132436
+ ...shadowVar ? [`box-shadow: ${shadowVar};`] : []
132437
+ ];
132438
+ const layoutRules = [`padding-inline: ${INSET_SHELL_INTERIOR_PADDING_X};`];
132439
+ return `\n@media ${MQ_MD_UP} {\n${shellRootSelector} {\n ${rootRules.join("\n ")}\n}\n${shellBeforeSelector} {\n ${beforeRules.join("\n ")}\n}\n${layoutSelector} {\n ${layoutRules.join("\n ")}\n}\n}\n`;
132236
132440
  }
132237
132441
  /**
132238
132442
  * Generate logo typography styles
@@ -132310,7 +132514,7 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
132310
132514
  */
132311
132515
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
132312
132516
  const navPreferences = {
132313
- typography: header.navTypography ?? "inherit",
132517
+ typography: header.navFontRole ?? header.navTypography ?? "inherit",
132314
132518
  fontSize: readHeaderNavFontSizePreference(header.navTextSize)
132315
132519
  };
132316
132520
  if (header.navLinkStyle) return generateNavLinkCSS({
@@ -136649,6 +136853,12 @@ const containerResponsiveThemeCss = `/*
136649
136853
  .rb-lg-hidden {
136650
136854
  display: none;
136651
136855
  }
136856
+ .rb-lg-flex-row {
136857
+ flex-direction: row;
136858
+ }
136859
+ .rb-lg-items-center {
136860
+ align-items: center;
136861
+ }
136652
136862
  }
136653
136863
 
136654
136864
  }
@@ -148085,7 +148295,7 @@ const containerResponsiveThemeCss = `/*
148085
148295
  [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
148086
148296
  .rb-feature-card {
148087
148297
  height: auto;
148088
- overflow: hidden;
148298
+ overflow: visible;
148089
148299
  border: 0;
148090
148300
  border-radius: 0;
148091
148301
  background: transparent;
@@ -148705,7 +148915,8 @@ function ThemeScope$1({ theme, children, themeId = "theme-default", responsiveMo
148705
148915
  });
148706
148916
  }
148707
148917
  //#endregion
148708
- //#region ../theme-core/src/footer/mode.ts
148918
+ //#region ../blocks/src/system/blocks/site-footer-runtime.ts
148919
+ init_src$3();
148709
148920
  /**
148710
148921
  * Resolve what to render for the footer given the current mode and whether the
148711
148922
  * site is SDK-managed.
@@ -149215,19 +149426,9 @@ function getPrimaryNavigation(navigation) {
149215
149426
  return a.id.localeCompare(b.id);
149216
149427
  })[0] ?? null;
149217
149428
  }
149218
- /**
149219
- * Get the footer navigation menu object.
149220
- * Returns menu marked as isFooter, or null if none marked.
149221
- *
149222
- * @example
149223
- * ```ts
149224
- * const menu = getFooterNavigation(siteData.navigation);
149225
- * console.log(menu?.name); // "Footer menu"
149226
- * ```
149227
- */
149228
- function getFooterNavigation(navigation) {
149429
+ function getFooterNavigationByRole(navigation, role) {
149229
149430
  if (!navigation || navigation.length === 0) return null;
149230
- const footerMenus = navigation.filter((menu) => menu.isFooter);
149431
+ const footerMenus = navigation.filter((menu) => menu.footerRole === role || role === "main" && menu.footerRole == null && menu.isFooter);
149231
149432
  if (footerMenus.length > 1) console.warn(`[riverbank/sdk] Multiple footer navigation menus detected (${footerMenus.length}); using first flagged menu by input order.`);
149232
149433
  return footerMenus[0] ?? null;
149233
149434
  }
@@ -149440,7 +149641,10 @@ function buildMenu(navigation, routes, options) {
149440
149641
  * ```
149441
149642
  */
149442
149643
  function buildFooterMenu(navigation, routes, options) {
149443
- const menu = getFooterNavigation(navigation);
149644
+ return buildFooterMenuForRole(navigation, routes, "main", options);
149645
+ }
149646
+ function buildFooterMenuForRole(navigation, routes, role, options) {
149647
+ const menu = getFooterNavigationByRole(navigation, role);
149444
149648
  if (!menu) return {
149445
149649
  items: [],
149446
149650
  ctaItem: null,
@@ -149607,6 +149811,7 @@ async function Layout({ siteData: providedSiteData, client, siteId, slug, domain
149607
149811
  };
149608
149812
  const menuViewModel = buildMenu(navigation, routes, navigationOptions);
149609
149813
  const footerMenuViewModel = buildFooterMenu(navigation, routes, navigationOptions);
149814
+ const legalFooterMenuViewModel = buildFooterMenuForRole(navigation, routes, "legal-policy", navigationOptions);
149610
149815
  const logoViewModel = buildLogo(layout.logo ?? null, site.title);
149611
149816
  const headerData = {
149612
149817
  menu: menuViewModel,
@@ -149618,6 +149823,7 @@ async function Layout({ siteData: providedSiteData, client, siteId, slug, domain
149618
149823
  const footerData = {
149619
149824
  menu: menuViewModel,
149620
149825
  footerMenu: footerMenuViewModel,
149826
+ legalFooterMenu: legalFooterMenuViewModel,
149621
149827
  logo: logoViewModel,
149622
149828
  site,
149623
149829
  theme,
@@ -149653,6 +149859,7 @@ async function Layout({ siteData: providedSiteData, client, siteId, slug, domain
149653
149859
  site,
149654
149860
  menu: menuViewModel,
149655
149861
  footerMenu: footerMenuViewModel,
149862
+ legalFooterMenu: legalFooterMenuViewModel,
149656
149863
  content: { logo: logoViewModel }
149657
149864
  };
149658
149865
  let headerElement = null;
@@ -150240,6 +150447,7 @@ const TAG_TEMPLATES = {
150240
150447
  siteRouteOutcomes: "riverbank:site:{siteId}:route-outcomes",
150241
150448
  routeById: "riverbank:route:{routeId}",
150242
150449
  pageById: "riverbank:page:{pageId}",
150450
+ pageSurfaceById: "riverbank:page-surface:{pageSurfaceId}",
150243
150451
  workflowRunById: "riverbank:workflow-run:{runId}",
150244
150452
  siteForms: "riverbank:site:{siteId}:forms",
150245
150453
  formById: "riverbank:form:{formId}",
@@ -150263,7 +150471,7 @@ const TAG_TEMPLATES = {
150263
150471
  blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
150264
150472
  blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
150265
150473
  blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
150266
- 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;
150474
+ 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;
150267
150475
  //#endregion
150268
150476
  //#region ../api/src/demoDashboardMutationSurfaces.ts
150269
150477
  init_src$3();