@riverbankcms/sdk 0.102.0 → 0.103.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 (101) hide show
  1. package/README.md +10 -2
  2. package/dist/{PreviewEditorSidebar-BKkhhkJk.mjs → PreviewEditorSidebar-DkNpCPja.mjs} +75 -9
  3. package/dist/{PreviewEditorUI-DIvTqcqI.mjs → PreviewEditorUI-DeNKtqk3.mjs} +2 -2
  4. package/dist/{SdkPreviewModeRuntime-CA2k7Z_T.mjs → SdkPreviewModeRuntime-5bCsXK2y.mjs} +572 -285
  5. package/dist/{SiteChromeCustomizeContext-Bh9-DtMQ.mjs → SiteChromeCustomizeContext-CO1sTK_W.mjs} +336 -36
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +298 -298
  7. package/dist/_dts/api/src/index.d.ts +1 -1
  8. package/dist/_dts/api/src/navigation/contracts.d.ts +6 -6
  9. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  10. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -1
  11. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  12. package/dist/_dts/blocks/src/index.d.ts +1 -1
  13. package/dist/_dts/blocks/src/server.d.ts +1 -1
  14. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +7 -7
  15. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  16. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +14 -14
  17. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +5 -5
  18. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +227 -227
  19. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +1 -1
  20. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  21. package/dist/_dts/blocks/src/system/customize/facets.d.ts +2 -2
  22. package/dist/_dts/blocks/src/system/inlineText.d.ts +2 -2
  23. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +177 -177
  24. package/dist/_dts/blocks/src/system/node/schema.d.ts +1 -1
  25. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -7
  27. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
  28. package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
  29. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +154 -18
  30. package/dist/_dts/db/src/schemas/forms.d.ts +15 -15
  31. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -1
  32. package/dist/_dts/preview-next/src/client/preview/CustomizeColorTokenPicker.d.ts +27 -0
  33. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  34. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +10 -2
  35. package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +1 -1
  36. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +16 -1
  37. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +3 -2
  38. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  39. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  40. package/dist/_dts/sdk/src/contracts/page.d.ts +2 -0
  41. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +10 -10
  42. package/dist/_dts/sdk/src/next/revalidate.d.ts +14 -1
  43. package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -4
  44. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -1
  45. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -2
  46. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -4
  47. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +1 -0
  48. package/dist/_dts/sdk/src/version.d.ts +1 -1
  49. package/dist/_dts/site-commands/src/commands.d.ts +19 -19
  50. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  51. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +3 -3
  52. package/dist/_dts/theme-core/src/buttons/types.d.ts +7 -7
  53. package/dist/_dts/theme-core/src/cards/types.d.ts +6 -6
  54. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  55. package/dist/_dts/theme-core/src/inputs/types.d.ts +4 -4
  56. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +150 -144
  57. package/dist/_dts/theme-core/src/navigation/types.d.ts +6 -6
  58. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +5 -5
  59. package/dist/_dts/theme-core/src/schema.d.ts +199 -169
  60. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  61. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  62. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +24 -24
  63. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -2
  64. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  65. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -2
  66. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +26 -1
  67. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +77 -0
  68. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +44 -0
  69. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  70. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  71. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +3 -3
  72. package/dist/_dts/ui/src/badge.d.ts +1 -1
  73. package/dist/_dts/ui/src/button.d.ts +1 -1
  74. package/dist/_dts/ui/src/card.d.ts +1 -1
  75. package/dist/_dts/ui/src/toggle.d.ts +2 -2
  76. package/dist/cli/index.mjs +28 -7
  77. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +9 -1
  78. package/dist/client/client.mjs +337 -69
  79. package/dist/client/hooks.mjs +13 -1
  80. package/dist/client/rendering/client.mjs +25 -4
  81. package/dist/client/rendering.mjs +336 -68
  82. package/dist/preview-next/client/runtime.mjs +3 -3
  83. package/dist/{sdk-runtime-K8Oqj97H.mjs → sdk-runtime-C8whifOy.mjs} +1 -1
  84. package/dist/{separator-CRoP34pT.mjs → separator-CM2C5Axs.mjs} +1 -1
  85. package/dist/server/components.mjs +321 -65
  86. package/dist/server/config-validation.mjs +12 -1
  87. package/dist/server/config.mjs +12 -1
  88. package/dist/server/data.mjs +12 -1
  89. package/dist/server/index.mjs +1 -1
  90. package/dist/server/next/revalidate.mjs +31 -1
  91. package/dist/server/next.mjs +325 -66
  92. package/dist/server/page-converter.mjs +12 -1
  93. package/dist/server/prebuild.mjs +1 -1
  94. package/dist/server/rendering/server.mjs +323 -65
  95. package/dist/server/rendering.mjs +323 -65
  96. package/dist/server/routing.mjs +24 -3
  97. package/dist/server/server.mjs +15 -2
  98. package/dist/server/theme-bridge.mjs +153 -32
  99. package/dist/server/theme.mjs +2 -0
  100. package/dist/styles/index.css +123 -30
  101. package/package.json +1 -1
@@ -12303,6 +12303,8 @@ const headerSchema = z$1.object({
12303
12303
  navStyle: headerNavStyle,
12304
12304
  navColor: themeColorTokenSchema.nullable().optional(),
12305
12305
  navWeight: navFontWeight.default("medium"),
12306
+ navTypography: z$1.enum(["body", "heading"]).optional(),
12307
+ navTextSize: navLinkStyleSchema.shape.textSize,
12306
12308
  container: headerContainerSchema,
12307
12309
  border: headerBorderSchema,
12308
12310
  shadow: componentShadowSchema.optional(),
@@ -13904,6 +13906,31 @@ function uniqueStrings(values) {
13904
13906
  }
13905
13907
  //#endregion
13906
13908
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
13909
+ function boundaryRuntimeMetrics(family, size, heightExpression) {
13910
+ return {
13911
+ family,
13912
+ size,
13913
+ heightCss: heightExpression.includes(" ") ? `calc(${heightExpression})` : heightExpression,
13914
+ reserveCss: `calc((${heightExpression}) / 2)`
13915
+ };
13916
+ }
13917
+ const sectionBoundaryRuntimeMetricsByTransition = {
13918
+ none: null,
13919
+ "soft-fade-short": boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"),
13920
+ "soft-fade-long": boundaryRuntimeMetrics("gradient", "spacious", "10rem"),
13921
+ "soft-fade-expansive": boundaryRuntimeMetrics("gradient", "expansive", "14rem"),
13922
+ "wave-edge": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13923
+ "wave-edge-balanced": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13924
+ "wave-edge-gentle": boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"),
13925
+ "wave-edge-bold": boundaryRuntimeMetrics("wave", "large", "7rem + 2px"),
13926
+ "wave-edge-drift": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13927
+ "angle-edge": boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"),
13928
+ "angle-edge-subtle": boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"),
13929
+ "angle-edge-steep": boundaryRuntimeMetrics("angle", "large", "7rem + 2px")
13930
+ };
13931
+ function boundaryRuntimeMetricsForTransition(transition) {
13932
+ return sectionBoundaryRuntimeMetricsByTransition[transition];
13933
+ }
13907
13934
  const noneBoundaryOption = {
13908
13935
  id: asBoundaryOptionId("break:none"),
13909
13936
  label: "None",
@@ -14059,12 +14086,12 @@ function validateUniquePageDesignPins(intent, ctx) {
14059
14086
  label: "block Look pin"
14060
14087
  });
14061
14088
  addDuplicateStringIssues(ctx, {
14062
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
14089
+ values: intent.boundaryPins.map((pin) => boundaryKey$1(pin.previousBlockId, pin.nextBlockId)),
14063
14090
  path: ["boundaryPins"],
14064
14091
  label: "boundary pin"
14065
14092
  });
14066
14093
  }
14067
- function boundaryKey(previousBlockId, nextBlockId) {
14094
+ function boundaryKey$1(previousBlockId, nextBlockId) {
14068
14095
  return makeBoundaryId(previousBlockId, nextBlockId);
14069
14096
  }
14070
14097
  //#endregion
@@ -14583,7 +14610,7 @@ const overlayLogoAccommodations = [
14583
14610
  * optional nested styling fields that would otherwise leak from another Look.
14584
14611
  */
14585
14612
  function baseHeader(theme) {
14586
- const { navLinkStyle: _navLinkStyle, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
14613
+ 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;
14587
14614
  return {
14588
14615
  ...header,
14589
14616
  navContainer: {
@@ -18265,6 +18292,13 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
18265
18292
  return token ? [token] : [];
18266
18293
  });
18267
18294
  }
18295
+ function mergeHeaderNavTypographyPreference(style, preferences) {
18296
+ return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
18297
+ ...style,
18298
+ ...preferences.typography === "inherit" ? {} : { typography: preferences.typography },
18299
+ ...preferences.fontSize === "inherit" ? {} : { textSize: preferences.fontSize }
18300
+ };
18301
+ }
18268
18302
  //#endregion
18269
18303
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
18270
18304
  const themeTokenRecipeOptions = {
@@ -52068,15 +52102,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
52068
52102
  * legacy navStyle, navWeight, navColor, and navEffects settings.
52069
52103
  */
52070
52104
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
52105
+ const navPreferences = {
52106
+ typography: header.navTypography ?? "inherit",
52107
+ fontSize: header.navTextSize ?? "inherit"
52108
+ };
52071
52109
  if (header.navLinkStyle) return generateNavLinkCSS({
52072
52110
  themeId,
52073
52111
  tokens,
52074
52112
  theme,
52075
- style: contrastTreatment || navTextSize ? {
52113
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
52076
52114
  ...header.navLinkStyle,
52077
52115
  ...contrastTreatment ? { contrastTreatment } : {},
52078
52116
  ...navTextSize ? { textSize: navTextSize } : {}
52079
- } : header.navLinkStyle,
52117
+ } : header.navLinkStyle, navPreferences),
52080
52118
  className: "header-nav-link"
52081
52119
  });
52082
52120
  const navStyle = header.navStyle ?? "minimal";
@@ -52148,7 +52186,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
52148
52186
  themeId,
52149
52187
  tokens,
52150
52188
  theme,
52151
- style: mergedStyle,
52189
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
52152
52190
  className: "header-nav-link"
52153
52191
  });
52154
52192
  }
@@ -52539,6 +52577,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
52539
52577
  const driftWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V39C115 31 205 54 340 48C505 41 610 16 760 33C920 51 1015 64 1160 44C1280 27 1375 35 1440 50V72H0Z' fill='white'/></svg>");
52540
52578
  function generateSiteStyleTransitionCss(themeId) {
52541
52579
  const selector = `:where([data-theme-scope="${themeId}"])`;
52580
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
52581
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
52582
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
52542
52583
  return `${selector} [data-style-group^='site-style-transition-'] {
52543
52584
  position: relative;
52544
52585
  z-index: 2;
@@ -52546,23 +52587,48 @@ function generateSiteStyleTransitionCss(themeId) {
52546
52587
  --site-style-transition-to: rgb(var(--tb-background));
52547
52588
  }
52548
52589
 
52549
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
52590
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
52550
52591
  position: relative;
52551
52592
  z-index: 3;
52552
52593
  height: 0;
52553
52594
  pointer-events: none;
52595
+ --site-style-boundary-height: ${mediumBoundaryHeight};
52554
52596
  }
52555
52597
 
52556
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
52557
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
52558
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52598
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
52599
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
52600
+ }
52601
+
52602
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
52603
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
52604
+ }
52605
+
52606
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
52607
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
52608
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
52559
52609
  content: '';
52560
52610
  position: absolute;
52561
52611
  left: 0;
52562
52612
  right: 0;
52563
- bottom: -2px;
52613
+ top: 0;
52614
+ transform: translateY(-50%);
52615
+ z-index: 0;
52616
+ height: var(--site-style-boundary-height);
52617
+ background: var(--site-style-transition-from);
52618
+ pointer-events: none;
52619
+ }
52620
+
52621
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
52622
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
52623
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52624
+ content: '';
52625
+ position: absolute;
52626
+ left: 0;
52627
+ right: 0;
52628
+ top: 0;
52629
+ transform: translateY(-50%);
52564
52630
  z-index: 1;
52565
- height: calc(6rem + 2px);
52631
+ height: var(--site-style-boundary-height);
52566
52632
  pointer-events: none;
52567
52633
  }
52568
52634
 
@@ -52600,7 +52666,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
52600
52666
  --site-style-transition-to: rgb(var(--tb-primary-800));
52601
52667
  }
52602
52668
 
52603
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52669
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52604
52670
  /* Fallback for browsers without color-mix(). */
52605
52671
  background: linear-gradient(
52606
52672
  to bottom,
@@ -52616,30 +52682,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
52616
52682
  );
52617
52683
  }
52618
52684
 
52619
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
52620
- height: 10rem;
52685
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
52686
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
52621
52687
  }
52622
52688
 
52623
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
52624
- height: 14rem;
52689
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
52690
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
52625
52691
  }
52626
52692
 
52627
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
52693
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
52694
+ height: calc(var(--site-style-boundary-height) + 2px);
52628
52695
  background: var(--site-style-transition-to);
52629
52696
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
52630
52697
  }
52631
52698
 
52632
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52633
- height: calc(4.5rem + 2px);
52699
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
52700
+ --site-style-boundary-height: ${compactBoundaryHeight};
52701
+ }
52702
+
52703
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52634
52704
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
52635
52705
  }
52636
52706
 
52637
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52638
- height: calc(7rem + 2px);
52707
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
52708
+ --site-style-boundary-height: ${largeBoundaryHeight};
52709
+ }
52710
+
52711
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52639
52712
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
52640
52713
  }
52641
52714
 
52642
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
52715
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
52643
52716
  background: var(--site-style-transition-to);
52644
52717
  mask-image: url("${classicWaveTransitionMask}");
52645
52718
  mask-repeat: no-repeat;
@@ -52649,28 +52722,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
52649
52722
  -webkit-mask-size: 100% 100%;
52650
52723
  }
52651
52724
 
52652
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52725
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52653
52726
  mask-image: url("${balancedWaveTransitionMask}");
52654
52727
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
52655
52728
  }
52656
52729
 
52657
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52658
- height: calc(4.5rem + 2px);
52730
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
52731
+ --site-style-boundary-height: ${compactBoundaryHeight};
52732
+ }
52733
+
52734
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52659
52735
  mask-image: url("${gentleWaveTransitionMask}");
52660
52736
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
52661
52737
  }
52662
52738
 
52663
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52664
- height: calc(7rem + 2px);
52739
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
52740
+ --site-style-boundary-height: ${largeBoundaryHeight};
52741
+ }
52742
+
52743
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52665
52744
  mask-image: url("${boldWaveTransitionMask}");
52666
52745
  -webkit-mask-image: url("${boldWaveTransitionMask}");
52667
52746
  }
52668
52747
 
52669
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52748
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52670
52749
  mask-image: url("${driftWaveTransitionMask}");
52671
52750
  -webkit-mask-image: url("${driftWaveTransitionMask}");
52672
52751
  }`;
52673
52752
  }
52753
+ function requiredBoundaryHeightCss(transition) {
52754
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
52755
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
52756
+ return metrics.heightCss;
52757
+ }
52674
52758
  function svgDataUrl(svg) {
52675
52759
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
52676
52760
  }
@@ -54793,13 +54877,15 @@ function sourceLabel(source) {
54793
54877
  }
54794
54878
  //#endregion
54795
54879
  //#region ../blocks/src/PageRenderer.tsx
54796
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54880
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54797
54881
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
54798
54882
  dataContext?.imageResolveContext,
54799
54883
  dataContext?.mediaAssets,
54800
54884
  dataContext?.siteId,
54801
54885
  dataContext?.supabaseUrl
54802
54886
  ]);
54887
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
54888
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
54803
54889
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
54804
54890
  className: "rb-p-6 rb-caption",
54805
54891
  style: textColorStyle("mutedText"),
@@ -54811,6 +54897,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54811
54897
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
54812
54898
  const blockPosition = pageBlockPosition(index, page.blocks.length);
54813
54899
  const blockKey = block.id ?? `${block.kind}-${index}`;
54900
+ const previousBlock = page.blocks[index - 1] ?? null;
54901
+ const nextBlock = page.blocks[index + 1] ?? null;
54902
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
54903
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
54904
+ const boundaryElement = renderBoundaryAfterBlock({
54905
+ block,
54906
+ nextBlock,
54907
+ blockKey,
54908
+ boundaryByAdjacentBlockIds,
54909
+ wrapBoundary
54910
+ });
54814
54911
  const cleanKind = block.kind.replace(/^block\./, "");
54815
54912
  const definition = getBlockDefinition(block.kind);
54816
54913
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -54833,11 +54930,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54833
54930
  imageResolveContext,
54834
54931
  previewAuthoring
54835
54932
  };
54836
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
54933
+ if (!shouldUseWrapper) {
54934
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
54935
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
54936
+ }
54837
54937
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
54838
54938
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
54839
54939
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
54840
54940
  const transitionStyle = transitionCssVarsStyle(renderableContent);
54941
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
54942
+ before: boundaryBefore,
54943
+ after: boundaryAfter
54944
+ }));
54841
54945
  const blockElement = /* @__PURE__ */ jsx("div", {
54842
54946
  className: wrapperClassName,
54843
54947
  "data-block": cleanKind,
@@ -54847,11 +54951,14 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54847
54951
  "data-block-variant": variantKey ?? void 0,
54848
54952
  "data-block-look": blockLook,
54849
54953
  "data-page-block-position": blockPosition,
54954
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
54955
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
54850
54956
  "data-style-group": styleGroup,
54851
- style: transitionStyle,
54957
+ style: blockStyle,
54852
54958
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
54853
54959
  }, blockKey);
54854
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54960
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
54961
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54855
54962
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
54856
54963
  "aria-hidden": "true",
54857
54964
  "data-block-transition": "",
@@ -54864,6 +54971,53 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54864
54971
  function isSiteStyleTransitionStyleGroup(value) {
54865
54972
  return value?.startsWith("site-style-transition-") === true;
54866
54973
  }
54974
+ function boundaryMapForAdjacentBlockIds(boundaries) {
54975
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
54976
+ }
54977
+ function boundaryKey(previousBlockId, nextBlockId) {
54978
+ return `${previousBlockId}\u0000${nextBlockId}`;
54979
+ }
54980
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
54981
+ const previousBlockId = previousBlock?.id ?? null;
54982
+ const nextBlockId = nextBlock?.id ?? null;
54983
+ if (!previousBlockId || !nextBlockId) return null;
54984
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
54985
+ }
54986
+ function renderBoundaryAfterBlock(input) {
54987
+ const previousBlockId = input.block.id;
54988
+ const nextBlockId = input.nextBlock?.id ?? null;
54989
+ if (!previousBlockId || !nextBlockId) return null;
54990
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
54991
+ if (!boundary) return null;
54992
+ const rendered = /* @__PURE__ */ jsx("div", {
54993
+ "aria-hidden": "true",
54994
+ "data-block-boundary": "",
54995
+ "data-boundary-id": boundary.boundaryId,
54996
+ "data-boundary-previous-block-id": boundary.previousBlockId,
54997
+ "data-boundary-next-block-id": boundary.nextBlockId,
54998
+ "data-style-group": boundary.styleGroup,
54999
+ style: boundaryCssVarsStyle(boundary)
55000
+ }, `${input.blockKey}:boundary`);
55001
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
55002
+ }
55003
+ function boundaryCssVarsStyle(boundary) {
55004
+ return {
55005
+ "--site-style-transition-from": boundary.cssVars.from,
55006
+ "--site-style-transition-to": boundary.cssVars.to
55007
+ };
55008
+ }
55009
+ function boundaryReserveCssVarsStyle(input) {
55010
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
55011
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
55012
+ if (!before && !after) return void 0;
55013
+ return {
55014
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
55015
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
55016
+ };
55017
+ }
55018
+ function boundaryReserveValueForTreatment(boundary) {
55019
+ return boundary.metrics.reserveCss;
55020
+ }
54867
55021
  function transitionCssVarsStyle(content) {
54868
55022
  const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
54869
55023
  const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
@@ -54875,6 +55029,14 @@ function transitionCssVarsStyle(content) {
54875
55029
  ...to ? { "--site-style-transition-to": to } : {}
54876
55030
  };
54877
55031
  }
55032
+ function mergeStyleObjects(left, right) {
55033
+ if (!left) return right;
55034
+ if (!right) return left;
55035
+ return {
55036
+ ...left,
55037
+ ...right
55038
+ };
55039
+ }
54878
55040
  function pageBlockPosition(index, blockCount) {
54879
55041
  if (blockCount <= 1) return "only";
54880
55042
  if (index === 0) return "first";
@@ -56786,52 +56948,53 @@ const containerResponsiveThemeCss = `/*
56786
56948
 
56787
56949
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
56788
56950
  .rb-section-pad-none {
56789
- padding-top: 0;
56790
- padding-bottom: 0;
56951
+ --rb-section-pad-y: 0rem;
56952
+ padding-top: var(--rb-section-pad-y);
56953
+ padding-bottom: var(--rb-section-pad-y);
56791
56954
  }
56792
56955
  .rb-section-pad-compact {
56793
- padding-top: 1.5rem;
56794
- padding-bottom: 1.5rem;
56956
+ --rb-section-pad-y: 1.5rem;
56957
+ padding-top: var(--rb-section-pad-y);
56958
+ padding-bottom: var(--rb-section-pad-y);
56795
56959
  }
56796
56960
  .rb-section-pad-cozy {
56797
- padding-top: 2.5rem;
56798
- padding-bottom: 2.5rem;
56961
+ --rb-section-pad-y: 2.5rem;
56962
+ padding-top: var(--rb-section-pad-y);
56963
+ padding-bottom: var(--rb-section-pad-y);
56799
56964
  }
56800
56965
  .rb-section-pad-medium {
56801
- padding-top: 3rem;
56802
- padding-bottom: 3rem;
56966
+ --rb-section-pad-y: 3rem;
56967
+ padding-top: var(--rb-section-pad-y);
56968
+ padding-bottom: var(--rb-section-pad-y);
56803
56969
  }
56804
56970
  .rb-section-pad-comfortable {
56805
- padding-top: 4rem;
56806
- padding-bottom: 4rem;
56971
+ --rb-section-pad-y: 4rem;
56972
+ padding-top: var(--rb-section-pad-y);
56973
+ padding-bottom: var(--rb-section-pad-y);
56807
56974
  }
56808
56975
  .rb-section-pad-spacious {
56809
- padding-top: 5rem;
56810
- padding-bottom: 5rem;
56976
+ --rb-section-pad-y: 5rem;
56977
+ padding-top: var(--rb-section-pad-y);
56978
+ padding-bottom: var(--rb-section-pad-y);
56811
56979
  }
56812
56980
 
56813
56981
  @container rb-site (min-width: 640px) {
56814
56982
 
56815
56983
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56816
56984
  .rb-section-pad-compact {
56817
- padding-top: 2rem;
56818
- padding-bottom: 2rem;
56985
+ --rb-section-pad-y: 2rem;
56819
56986
  }
56820
56987
  .rb-section-pad-cozy {
56821
- padding-top: 3.5rem;
56822
- padding-bottom: 3.5rem;
56988
+ --rb-section-pad-y: 3.5rem;
56823
56989
  }
56824
56990
  .rb-section-pad-medium {
56825
- padding-top: 4rem;
56826
- padding-bottom: 4rem;
56991
+ --rb-section-pad-y: 4rem;
56827
56992
  }
56828
56993
  .rb-section-pad-comfortable {
56829
- padding-top: 5rem;
56830
- padding-bottom: 5rem;
56994
+ --rb-section-pad-y: 5rem;
56831
56995
  }
56832
56996
  .rb-section-pad-spacious {
56833
- padding-top: 7rem;
56834
- padding-bottom: 7rem;
56997
+ --rb-section-pad-y: 7rem;
56835
56998
  }
56836
56999
  }
56837
57000
 
@@ -58221,30 +58384,122 @@ const containerResponsiveThemeCss = `/*
58221
58384
  :where(.theme-scope) .header-logo-text {
58222
58385
  font-size: 1.125rem; /* matches rb-text-lg */
58223
58386
  line-height: 1.75rem;
58387
+ margin-inline: -0.18em;
58388
+ padding-inline: 0.18em;
58224
58389
  transition: font-size 300ms var(--motion-ease, ease);
58225
58390
  }
58226
58391
 
58227
- /* Mobile: reduce site title size (~30%) to keep header compact */
58392
+ /* Centered variant uses larger title */
58393
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
58394
+ font-size: 1.25rem; /* matches rb-text-xl */
58395
+ line-height: 1.75rem;
58396
+ }
58397
+
58398
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58399
+ font-size: 0.95rem;
58400
+ line-height: 1.5rem;
58401
+ }
58402
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58403
+ font-size: 1.125rem;
58404
+ line-height: 1.75rem;
58405
+ }
58406
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58407
+ font-size: 1.35rem;
58408
+ line-height: 1.9rem;
58409
+ }
58410
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58411
+ font-size: 1.75rem;
58412
+ line-height: 2.25rem;
58413
+ }
58414
+
58415
+ :where(.theme-scope)
58416
+ .header-variant-centered
58417
+ .header-logo-size-compact
58418
+ .header-logo-text {
58419
+ font-size: 1.125rem;
58420
+ line-height: 1.75rem;
58421
+ }
58422
+ :where(.theme-scope)
58423
+ .header-variant-centered
58424
+ .header-logo-size-standard
58425
+ .header-logo-text {
58426
+ font-size: 1.25rem;
58427
+ line-height: 1.75rem;
58428
+ }
58429
+ :where(.theme-scope)
58430
+ .header-variant-centered
58431
+ .header-logo-size-generous
58432
+ .header-logo-text {
58433
+ font-size: 1.6rem;
58434
+ line-height: 2rem;
58435
+ }
58436
+ :where(.theme-scope)
58437
+ .header-variant-centered
58438
+ .header-logo-size-display
58439
+ .header-logo-text {
58440
+ font-size: 2.1rem;
58441
+ line-height: 2.5rem;
58442
+ }
58443
+
58444
+ /* Mobile: reduce site title size to keep header compact */
58228
58445
  @container rb-site (max-width: 767px) {
58229
58446
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
58230
- :where(.theme-scope) .header-logo-text {
58447
+ :where(.theme-scope) .header-logo-text,
58448
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58231
58449
  font-size: 0.8rem;
58232
58450
  line-height: 1.25rem;
58233
58451
  }
58234
58452
 
58235
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58453
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58454
+ font-size: 0.75rem;
58455
+ line-height: 1.15rem;
58456
+ }
58457
+
58458
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58459
+ font-size: 1rem;
58460
+ line-height: 1.4rem;
58461
+ }
58462
+
58463
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58464
+ font-size: 1.25rem;
58465
+ line-height: 1.65rem;
58466
+ }
58467
+
58468
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
58469
+ :where(.theme-scope)
58470
+ .header-variant-centered
58471
+ .header-logo-size-standard
58472
+ .header-logo-text {
58236
58473
  font-size: 0.875rem;
58237
58474
  line-height: 1.25rem;
58238
58475
  }
58476
+
58477
+ :where(.theme-scope)
58478
+ .header-variant-centered
58479
+ .header-logo-size-compact
58480
+ .header-logo-text {
58481
+ font-size: 0.8rem;
58482
+ line-height: 1.2rem;
58483
+ }
58484
+
58485
+ :where(.theme-scope)
58486
+ .header-variant-centered
58487
+ .header-logo-size-generous
58488
+ .header-logo-text {
58489
+ font-size: 1.125rem;
58490
+ line-height: 1.5rem;
58491
+ }
58492
+
58493
+ :where(.theme-scope)
58494
+ .header-variant-centered
58495
+ .header-logo-size-display
58496
+ .header-logo-text {
58497
+ font-size: 1.35rem;
58498
+ line-height: 1.75rem;
58499
+ }
58239
58500
  }
58240
58501
  }
58241
58502
 
58242
- /* Centered variant uses larger title */
58243
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58244
- font-size: 1.25rem; /* matches rb-text-xl */
58245
- line-height: 1.75rem;
58246
- }
58247
-
58248
58503
  /* =================================================================
58249
58504
  Shrink on Scroll - Logo & Title
58250
58505
  ================================================================= */
@@ -66585,7 +66840,7 @@ function toPageHydrationBootstrapConfig(props) {
66585
66840
  mediaAssets: props.mediaAssets
66586
66841
  };
66587
66842
  }
66588
- function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext, themeRuntime = defaultPageThemeRuntime }) {
66843
+ function PageContent({ page, runtimeBoundaries, theme, themeTokens: providedTokens, siteId, resolvedData, bookingOfferingPresets, routeMap, pagesByIdentifier, entriesByIdentifier, wrapBlock, registry, usePlaceholders = false, blockOverrides, sdkConfig, customBlocks, supabaseUrl, mediaAssets, apiBaseUrl, portalToken, previewToken, dataContext, themeRuntime = defaultPageThemeRuntime }) {
66589
66844
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
66590
66845
  return renderWithSdkThemeRuntime({
66591
66846
  themeRuntime,
@@ -66593,6 +66848,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
66593
66848
  children: /* @__PURE__ */ jsx(PageRenderer, {
66594
66849
  theme,
66595
66850
  page,
66851
+ runtimeBoundaries,
66596
66852
  themeTokens: sdkConfig?.theme?.palette ? {
66597
66853
  ...baseTokens,
66598
66854
  palette: {
@@ -69781,6 +70037,7 @@ async function loadPageWithDeps(deps, params) {
69781
70037
  }
69782
70038
  return {
69783
70039
  page: pageOutline,
70040
+ runtimeBoundaries: pageData.runtimeBoundaries,
69784
70041
  theme: support.theme,
69785
70042
  sdkConfig: support.sdkConfig,
69786
70043
  siteId,
@@ -72502,6 +72759,7 @@ async function loadContentFromContentResponseWithDeps(deps, params) {
72502
72759
  ogImageId: pageRecord.ogImageId ?? null
72503
72760
  },
72504
72761
  page: pageOutline,
72762
+ runtimeBoundaries: pageData.runtimeBoundaries,
72505
72763
  theme: support.theme,
72506
72764
  siteId,
72507
72765
  ...support.customBlocks ? { customBlocks: support.customBlocks } : {},