@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
@@ -19500,6 +19500,8 @@ const headerSchema = z$1.object({
19500
19500
  navStyle: headerNavStyle,
19501
19501
  navColor: themeColorTokenSchema.nullable().optional(),
19502
19502
  navWeight: navFontWeight.default("medium"),
19503
+ navTypography: z$1.enum(["body", "heading"]).optional(),
19504
+ navTextSize: navLinkStyleSchema.shape.textSize,
19503
19505
  container: headerContainerSchema,
19504
19506
  border: headerBorderSchema,
19505
19507
  shadow: componentShadowSchema.optional(),
@@ -21101,6 +21103,31 @@ function uniqueStrings(values) {
21101
21103
  }
21102
21104
  //#endregion
21103
21105
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
21106
+ function boundaryRuntimeMetrics(family, size, heightExpression) {
21107
+ return {
21108
+ family,
21109
+ size,
21110
+ heightCss: heightExpression.includes(" ") ? `calc(${heightExpression})` : heightExpression,
21111
+ reserveCss: `calc((${heightExpression}) / 2)`
21112
+ };
21113
+ }
21114
+ const sectionBoundaryRuntimeMetricsByTransition = {
21115
+ none: null,
21116
+ "soft-fade-short": boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"),
21117
+ "soft-fade-long": boundaryRuntimeMetrics("gradient", "spacious", "10rem"),
21118
+ "soft-fade-expansive": boundaryRuntimeMetrics("gradient", "expansive", "14rem"),
21119
+ "wave-edge": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
21120
+ "wave-edge-balanced": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
21121
+ "wave-edge-gentle": boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"),
21122
+ "wave-edge-bold": boundaryRuntimeMetrics("wave", "large", "7rem + 2px"),
21123
+ "wave-edge-drift": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
21124
+ "angle-edge": boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"),
21125
+ "angle-edge-subtle": boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"),
21126
+ "angle-edge-steep": boundaryRuntimeMetrics("angle", "large", "7rem + 2px")
21127
+ };
21128
+ function boundaryRuntimeMetricsForTransition(transition) {
21129
+ return sectionBoundaryRuntimeMetricsByTransition[transition];
21130
+ }
21104
21131
  const noneBoundaryOption = {
21105
21132
  id: asBoundaryOptionId("break:none"),
21106
21133
  label: "None",
@@ -21256,12 +21283,12 @@ function validateUniquePageDesignPins(intent, ctx) {
21256
21283
  label: "block Look pin"
21257
21284
  });
21258
21285
  addDuplicateStringIssues(ctx, {
21259
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
21286
+ values: intent.boundaryPins.map((pin) => boundaryKey$1(pin.previousBlockId, pin.nextBlockId)),
21260
21287
  path: ["boundaryPins"],
21261
21288
  label: "boundary pin"
21262
21289
  });
21263
21290
  }
21264
- function boundaryKey(previousBlockId, nextBlockId) {
21291
+ function boundaryKey$1(previousBlockId, nextBlockId) {
21265
21292
  return makeBoundaryId(previousBlockId, nextBlockId);
21266
21293
  }
21267
21294
  //#endregion
@@ -21780,7 +21807,7 @@ const overlayLogoAccommodations = [
21780
21807
  * optional nested styling fields that would otherwise leak from another Look.
21781
21808
  */
21782
21809
  function baseHeader(theme) {
21783
- const { navLinkStyle: _navLinkStyle, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
21810
+ 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;
21784
21811
  return {
21785
21812
  ...header,
21786
21813
  navContainer: {
@@ -25462,6 +25489,13 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
25462
25489
  return token ? [token] : [];
25463
25490
  });
25464
25491
  }
25492
+ function mergeHeaderNavTypographyPreference(style, preferences) {
25493
+ return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
25494
+ ...style,
25495
+ ...preferences.typography === "inherit" ? {} : { typography: preferences.typography },
25496
+ ...preferences.fontSize === "inherit" ? {} : { textSize: preferences.fontSize }
25497
+ };
25498
+ }
25465
25499
  //#endregion
25466
25500
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
25467
25501
  const themeTokenRecipeOptions = {
@@ -59157,15 +59191,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
59157
59191
  * legacy navStyle, navWeight, navColor, and navEffects settings.
59158
59192
  */
59159
59193
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
59194
+ const navPreferences = {
59195
+ typography: header.navTypography ?? "inherit",
59196
+ fontSize: header.navTextSize ?? "inherit"
59197
+ };
59160
59198
  if (header.navLinkStyle) return generateNavLinkCSS({
59161
59199
  themeId,
59162
59200
  tokens,
59163
59201
  theme,
59164
- style: contrastTreatment || navTextSize ? {
59202
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
59165
59203
  ...header.navLinkStyle,
59166
59204
  ...contrastTreatment ? { contrastTreatment } : {},
59167
59205
  ...navTextSize ? { textSize: navTextSize } : {}
59168
- } : header.navLinkStyle,
59206
+ } : header.navLinkStyle, navPreferences),
59169
59207
  className: "header-nav-link"
59170
59208
  });
59171
59209
  const navStyle = header.navStyle ?? "minimal";
@@ -59237,7 +59275,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
59237
59275
  themeId,
59238
59276
  tokens,
59239
59277
  theme,
59240
- style: mergedStyle,
59278
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
59241
59279
  className: "header-nav-link"
59242
59280
  });
59243
59281
  }
@@ -59628,6 +59666,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
59628
59666
  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>");
59629
59667
  function generateSiteStyleTransitionCss(themeId) {
59630
59668
  const selector = `:where([data-theme-scope="${themeId}"])`;
59669
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
59670
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
59671
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
59631
59672
  return `${selector} [data-style-group^='site-style-transition-'] {
59632
59673
  position: relative;
59633
59674
  z-index: 2;
@@ -59635,23 +59676,48 @@ function generateSiteStyleTransitionCss(themeId) {
59635
59676
  --site-style-transition-to: rgb(var(--tb-background));
59636
59677
  }
59637
59678
 
59638
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
59679
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
59639
59680
  position: relative;
59640
59681
  z-index: 3;
59641
59682
  height: 0;
59642
59683
  pointer-events: none;
59684
+ --site-style-boundary-height: ${mediumBoundaryHeight};
59685
+ }
59686
+
59687
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
59688
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
59689
+ }
59690
+
59691
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
59692
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
59693
+ }
59694
+
59695
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
59696
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
59697
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
59698
+ content: '';
59699
+ position: absolute;
59700
+ left: 0;
59701
+ right: 0;
59702
+ top: 0;
59703
+ transform: translateY(-50%);
59704
+ z-index: 0;
59705
+ height: var(--site-style-boundary-height);
59706
+ background: var(--site-style-transition-from);
59707
+ pointer-events: none;
59643
59708
  }
59644
59709
 
59645
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
59646
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
59647
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
59710
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
59711
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
59712
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
59648
59713
  content: '';
59649
59714
  position: absolute;
59650
59715
  left: 0;
59651
59716
  right: 0;
59652
- bottom: -2px;
59717
+ top: 0;
59718
+ transform: translateY(-50%);
59653
59719
  z-index: 1;
59654
- height: calc(6rem + 2px);
59720
+ height: var(--site-style-boundary-height);
59655
59721
  pointer-events: none;
59656
59722
  }
59657
59723
 
@@ -59689,7 +59755,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
59689
59755
  --site-style-transition-to: rgb(var(--tb-primary-800));
59690
59756
  }
59691
59757
 
59692
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
59758
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
59693
59759
  /* Fallback for browsers without color-mix(). */
59694
59760
  background: linear-gradient(
59695
59761
  to bottom,
@@ -59705,30 +59771,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
59705
59771
  );
59706
59772
  }
59707
59773
 
59708
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
59709
- height: 10rem;
59774
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
59775
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
59710
59776
  }
59711
59777
 
59712
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
59713
- height: 14rem;
59778
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
59779
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
59714
59780
  }
59715
59781
 
59716
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
59782
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
59783
+ height: calc(var(--site-style-boundary-height) + 2px);
59717
59784
  background: var(--site-style-transition-to);
59718
59785
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
59719
59786
  }
59720
59787
 
59721
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
59722
- height: calc(4.5rem + 2px);
59788
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
59789
+ --site-style-boundary-height: ${compactBoundaryHeight};
59790
+ }
59791
+
59792
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
59723
59793
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
59724
59794
  }
59725
59795
 
59726
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
59727
- height: calc(7rem + 2px);
59796
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
59797
+ --site-style-boundary-height: ${largeBoundaryHeight};
59798
+ }
59799
+
59800
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
59728
59801
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
59729
59802
  }
59730
59803
 
59731
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
59804
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
59732
59805
  background: var(--site-style-transition-to);
59733
59806
  mask-image: url("${classicWaveTransitionMask}");
59734
59807
  mask-repeat: no-repeat;
@@ -59738,28 +59811,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
59738
59811
  -webkit-mask-size: 100% 100%;
59739
59812
  }
59740
59813
 
59741
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
59814
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
59742
59815
  mask-image: url("${balancedWaveTransitionMask}");
59743
59816
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
59744
59817
  }
59745
59818
 
59746
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
59747
- height: calc(4.5rem + 2px);
59819
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
59820
+ --site-style-boundary-height: ${compactBoundaryHeight};
59821
+ }
59822
+
59823
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
59748
59824
  mask-image: url("${gentleWaveTransitionMask}");
59749
59825
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
59750
59826
  }
59751
59827
 
59752
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
59753
- height: calc(7rem + 2px);
59828
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
59829
+ --site-style-boundary-height: ${largeBoundaryHeight};
59830
+ }
59831
+
59832
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
59754
59833
  mask-image: url("${boldWaveTransitionMask}");
59755
59834
  -webkit-mask-image: url("${boldWaveTransitionMask}");
59756
59835
  }
59757
59836
 
59758
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
59837
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
59759
59838
  mask-image: url("${driftWaveTransitionMask}");
59760
59839
  -webkit-mask-image: url("${driftWaveTransitionMask}");
59761
59840
  }`;
59762
59841
  }
59842
+ function requiredBoundaryHeightCss(transition) {
59843
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
59844
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
59845
+ return metrics.heightCss;
59846
+ }
59763
59847
  function svgDataUrl(svg) {
59764
59848
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
59765
59849
  }
@@ -61882,13 +61966,15 @@ function sourceLabel(source) {
61882
61966
  }
61883
61967
  //#endregion
61884
61968
  //#region ../blocks/src/PageRenderer.tsx
61885
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
61969
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
61886
61970
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
61887
61971
  dataContext?.imageResolveContext,
61888
61972
  dataContext?.mediaAssets,
61889
61973
  dataContext?.siteId,
61890
61974
  dataContext?.supabaseUrl
61891
61975
  ]);
61976
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
61977
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
61892
61978
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
61893
61979
  className: "rb-p-6 rb-caption",
61894
61980
  style: textColorStyle("mutedText"),
@@ -61900,6 +61986,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61900
61986
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
61901
61987
  const blockPosition = pageBlockPosition(index, page.blocks.length);
61902
61988
  const blockKey = block.id ?? `${block.kind}-${index}`;
61989
+ const previousBlock = page.blocks[index - 1] ?? null;
61990
+ const nextBlock = page.blocks[index + 1] ?? null;
61991
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
61992
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
61993
+ const boundaryElement = renderBoundaryAfterBlock({
61994
+ block,
61995
+ nextBlock,
61996
+ blockKey,
61997
+ boundaryByAdjacentBlockIds,
61998
+ wrapBoundary
61999
+ });
61903
62000
  const cleanKind = block.kind.replace(/^block\./, "");
61904
62001
  const definition = getBlockDefinition(block.kind);
61905
62002
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -61922,11 +62019,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61922
62019
  imageResolveContext,
61923
62020
  previewAuthoring
61924
62021
  };
61925
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
62022
+ if (!shouldUseWrapper) {
62023
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
62024
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
62025
+ }
61926
62026
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
61927
62027
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
61928
62028
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
61929
62029
  const transitionStyle = transitionCssVarsStyle(renderableContent);
62030
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
62031
+ before: boundaryBefore,
62032
+ after: boundaryAfter
62033
+ }));
61930
62034
  const blockElement = /* @__PURE__ */ jsx("div", {
61931
62035
  className: wrapperClassName,
61932
62036
  "data-block": cleanKind,
@@ -61936,11 +62040,14 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61936
62040
  "data-block-variant": variantKey ?? void 0,
61937
62041
  "data-block-look": blockLook,
61938
62042
  "data-page-block-position": blockPosition,
62043
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
62044
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
61939
62045
  "data-style-group": styleGroup,
61940
- style: transitionStyle,
62046
+ style: blockStyle,
61941
62047
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
61942
62048
  }, blockKey);
61943
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
62049
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
62050
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
61944
62051
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
61945
62052
  "aria-hidden": "true",
61946
62053
  "data-block-transition": "",
@@ -61953,6 +62060,53 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
61953
62060
  function isSiteStyleTransitionStyleGroup(value) {
61954
62061
  return value?.startsWith("site-style-transition-") === true;
61955
62062
  }
62063
+ function boundaryMapForAdjacentBlockIds(boundaries) {
62064
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
62065
+ }
62066
+ function boundaryKey(previousBlockId, nextBlockId) {
62067
+ return `${previousBlockId}\u0000${nextBlockId}`;
62068
+ }
62069
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
62070
+ const previousBlockId = previousBlock?.id ?? null;
62071
+ const nextBlockId = nextBlock?.id ?? null;
62072
+ if (!previousBlockId || !nextBlockId) return null;
62073
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
62074
+ }
62075
+ function renderBoundaryAfterBlock(input) {
62076
+ const previousBlockId = input.block.id;
62077
+ const nextBlockId = input.nextBlock?.id ?? null;
62078
+ if (!previousBlockId || !nextBlockId) return null;
62079
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
62080
+ if (!boundary) return null;
62081
+ const rendered = /* @__PURE__ */ jsx("div", {
62082
+ "aria-hidden": "true",
62083
+ "data-block-boundary": "",
62084
+ "data-boundary-id": boundary.boundaryId,
62085
+ "data-boundary-previous-block-id": boundary.previousBlockId,
62086
+ "data-boundary-next-block-id": boundary.nextBlockId,
62087
+ "data-style-group": boundary.styleGroup,
62088
+ style: boundaryCssVarsStyle(boundary)
62089
+ }, `${input.blockKey}:boundary`);
62090
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
62091
+ }
62092
+ function boundaryCssVarsStyle(boundary) {
62093
+ return {
62094
+ "--site-style-transition-from": boundary.cssVars.from,
62095
+ "--site-style-transition-to": boundary.cssVars.to
62096
+ };
62097
+ }
62098
+ function boundaryReserveCssVarsStyle(input) {
62099
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
62100
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
62101
+ if (!before && !after) return void 0;
62102
+ return {
62103
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
62104
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
62105
+ };
62106
+ }
62107
+ function boundaryReserveValueForTreatment(boundary) {
62108
+ return boundary.metrics.reserveCss;
62109
+ }
61956
62110
  function transitionCssVarsStyle(content) {
61957
62111
  const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
61958
62112
  const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
@@ -61964,6 +62118,14 @@ function transitionCssVarsStyle(content) {
61964
62118
  ...to ? { "--site-style-transition-to": to } : {}
61965
62119
  };
61966
62120
  }
62121
+ function mergeStyleObjects(left, right) {
62122
+ if (!left) return right;
62123
+ if (!right) return left;
62124
+ return {
62125
+ ...left,
62126
+ ...right
62127
+ };
62128
+ }
61967
62129
  function pageBlockPosition(index, blockCount) {
61968
62130
  if (blockCount <= 1) return "only";
61969
62131
  if (index === 0) return "first";
@@ -63893,52 +64055,53 @@ const containerResponsiveThemeCss = `/*
63893
64055
 
63894
64056
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
63895
64057
  .rb-section-pad-none {
63896
- padding-top: 0;
63897
- padding-bottom: 0;
64058
+ --rb-section-pad-y: 0rem;
64059
+ padding-top: var(--rb-section-pad-y);
64060
+ padding-bottom: var(--rb-section-pad-y);
63898
64061
  }
63899
64062
  .rb-section-pad-compact {
63900
- padding-top: 1.5rem;
63901
- padding-bottom: 1.5rem;
64063
+ --rb-section-pad-y: 1.5rem;
64064
+ padding-top: var(--rb-section-pad-y);
64065
+ padding-bottom: var(--rb-section-pad-y);
63902
64066
  }
63903
64067
  .rb-section-pad-cozy {
63904
- padding-top: 2.5rem;
63905
- padding-bottom: 2.5rem;
64068
+ --rb-section-pad-y: 2.5rem;
64069
+ padding-top: var(--rb-section-pad-y);
64070
+ padding-bottom: var(--rb-section-pad-y);
63906
64071
  }
63907
64072
  .rb-section-pad-medium {
63908
- padding-top: 3rem;
63909
- padding-bottom: 3rem;
64073
+ --rb-section-pad-y: 3rem;
64074
+ padding-top: var(--rb-section-pad-y);
64075
+ padding-bottom: var(--rb-section-pad-y);
63910
64076
  }
63911
64077
  .rb-section-pad-comfortable {
63912
- padding-top: 4rem;
63913
- padding-bottom: 4rem;
64078
+ --rb-section-pad-y: 4rem;
64079
+ padding-top: var(--rb-section-pad-y);
64080
+ padding-bottom: var(--rb-section-pad-y);
63914
64081
  }
63915
64082
  .rb-section-pad-spacious {
63916
- padding-top: 5rem;
63917
- padding-bottom: 5rem;
64083
+ --rb-section-pad-y: 5rem;
64084
+ padding-top: var(--rb-section-pad-y);
64085
+ padding-bottom: var(--rb-section-pad-y);
63918
64086
  }
63919
64087
 
63920
64088
  @container rb-site (min-width: 640px) {
63921
64089
 
63922
64090
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
63923
64091
  .rb-section-pad-compact {
63924
- padding-top: 2rem;
63925
- padding-bottom: 2rem;
64092
+ --rb-section-pad-y: 2rem;
63926
64093
  }
63927
64094
  .rb-section-pad-cozy {
63928
- padding-top: 3.5rem;
63929
- padding-bottom: 3.5rem;
64095
+ --rb-section-pad-y: 3.5rem;
63930
64096
  }
63931
64097
  .rb-section-pad-medium {
63932
- padding-top: 4rem;
63933
- padding-bottom: 4rem;
64098
+ --rb-section-pad-y: 4rem;
63934
64099
  }
63935
64100
  .rb-section-pad-comfortable {
63936
- padding-top: 5rem;
63937
- padding-bottom: 5rem;
64101
+ --rb-section-pad-y: 5rem;
63938
64102
  }
63939
64103
  .rb-section-pad-spacious {
63940
- padding-top: 7rem;
63941
- padding-bottom: 7rem;
64104
+ --rb-section-pad-y: 7rem;
63942
64105
  }
63943
64106
  }
63944
64107
 
@@ -65328,30 +65491,122 @@ const containerResponsiveThemeCss = `/*
65328
65491
  :where(.theme-scope) .header-logo-text {
65329
65492
  font-size: 1.125rem; /* matches rb-text-lg */
65330
65493
  line-height: 1.75rem;
65494
+ margin-inline: -0.18em;
65495
+ padding-inline: 0.18em;
65331
65496
  transition: font-size 300ms var(--motion-ease, ease);
65332
65497
  }
65333
65498
 
65334
- /* Mobile: reduce site title size (~30%) to keep header compact */
65499
+ /* Centered variant uses larger title */
65500
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
65501
+ font-size: 1.25rem; /* matches rb-text-xl */
65502
+ line-height: 1.75rem;
65503
+ }
65504
+
65505
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
65506
+ font-size: 0.95rem;
65507
+ line-height: 1.5rem;
65508
+ }
65509
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
65510
+ font-size: 1.125rem;
65511
+ line-height: 1.75rem;
65512
+ }
65513
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
65514
+ font-size: 1.35rem;
65515
+ line-height: 1.9rem;
65516
+ }
65517
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
65518
+ font-size: 1.75rem;
65519
+ line-height: 2.25rem;
65520
+ }
65521
+
65522
+ :where(.theme-scope)
65523
+ .header-variant-centered
65524
+ .header-logo-size-compact
65525
+ .header-logo-text {
65526
+ font-size: 1.125rem;
65527
+ line-height: 1.75rem;
65528
+ }
65529
+ :where(.theme-scope)
65530
+ .header-variant-centered
65531
+ .header-logo-size-standard
65532
+ .header-logo-text {
65533
+ font-size: 1.25rem;
65534
+ line-height: 1.75rem;
65535
+ }
65536
+ :where(.theme-scope)
65537
+ .header-variant-centered
65538
+ .header-logo-size-generous
65539
+ .header-logo-text {
65540
+ font-size: 1.6rem;
65541
+ line-height: 2rem;
65542
+ }
65543
+ :where(.theme-scope)
65544
+ .header-variant-centered
65545
+ .header-logo-size-display
65546
+ .header-logo-text {
65547
+ font-size: 2.1rem;
65548
+ line-height: 2.5rem;
65549
+ }
65550
+
65551
+ /* Mobile: reduce site title size to keep header compact */
65335
65552
  @container rb-site (max-width: 767px) {
65336
65553
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
65337
- :where(.theme-scope) .header-logo-text {
65554
+ :where(.theme-scope) .header-logo-text,
65555
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
65338
65556
  font-size: 0.8rem;
65339
65557
  line-height: 1.25rem;
65340
65558
  }
65341
65559
 
65342
- :where(.theme-scope) .header-variant-centered .header-logo-text {
65560
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
65561
+ font-size: 0.75rem;
65562
+ line-height: 1.15rem;
65563
+ }
65564
+
65565
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
65566
+ font-size: 1rem;
65567
+ line-height: 1.4rem;
65568
+ }
65569
+
65570
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
65571
+ font-size: 1.25rem;
65572
+ line-height: 1.65rem;
65573
+ }
65574
+
65575
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
65576
+ :where(.theme-scope)
65577
+ .header-variant-centered
65578
+ .header-logo-size-standard
65579
+ .header-logo-text {
65343
65580
  font-size: 0.875rem;
65344
65581
  line-height: 1.25rem;
65345
65582
  }
65583
+
65584
+ :where(.theme-scope)
65585
+ .header-variant-centered
65586
+ .header-logo-size-compact
65587
+ .header-logo-text {
65588
+ font-size: 0.8rem;
65589
+ line-height: 1.2rem;
65590
+ }
65591
+
65592
+ :where(.theme-scope)
65593
+ .header-variant-centered
65594
+ .header-logo-size-generous
65595
+ .header-logo-text {
65596
+ font-size: 1.125rem;
65597
+ line-height: 1.5rem;
65598
+ }
65599
+
65600
+ :where(.theme-scope)
65601
+ .header-variant-centered
65602
+ .header-logo-size-display
65603
+ .header-logo-text {
65604
+ font-size: 1.35rem;
65605
+ line-height: 1.75rem;
65606
+ }
65346
65607
  }
65347
65608
  }
65348
65609
 
65349
- /* Centered variant uses larger title */
65350
- :where(.theme-scope) .header-variant-centered .header-logo-text {
65351
- font-size: 1.25rem; /* matches rb-text-xl */
65352
- line-height: 1.75rem;
65353
- }
65354
-
65355
65610
  /* =================================================================
65356
65611
  Shrink on Scroll - Logo & Title
65357
65612
  ================================================================= */
@@ -78565,6 +78820,7 @@ async function loadContentFromContentResponseWithDeps(deps, params) {
78565
78820
  ogImageId: pageRecord.ogImageId ?? null
78566
78821
  },
78567
78822
  page: pageOutline,
78823
+ runtimeBoundaries: pageData.runtimeBoundaries,
78568
78824
  theme: support.theme,
78569
78825
  siteId,
78570
78826
  ...support.customBlocks ? { customBlocks: support.customBlocks } : {},
@@ -78842,7 +79098,7 @@ function toPageHydrationBootstrapConfig(props) {
78842
79098
  mediaAssets: props.mediaAssets
78843
79099
  };
78844
79100
  }
78845
- 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 }) {
79101
+ 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 }) {
78846
79102
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
78847
79103
  return renderWithSdkThemeRuntime({
78848
79104
  themeRuntime,
@@ -78850,6 +79106,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
78850
79106
  children: /* @__PURE__ */ jsx(PageRenderer, {
78851
79107
  theme,
78852
79108
  page,
79109
+ runtimeBoundaries,
78853
79110
  themeTokens: sdkConfig?.theme?.palette ? {
78854
79111
  ...baseTokens,
78855
79112
  palette: {
@@ -80147,7 +80404,7 @@ var CircuitOpenError = class extends Error {
80147
80404
  * 1. This constant
80148
80405
  * 2. The "version" field in package.json
80149
80406
  */
80150
- const SDK_VERSION = "0.102.0";
80407
+ const SDK_VERSION = "0.103.0";
80151
80408
  //#endregion
80152
80409
  //#region src/next/content-load-failure.ts
80153
80410
  const SdkContentLoadError = RiverbankContentLoadError;
@@ -80607,6 +80864,8 @@ function createCatchAllPage(options) {
80607
80864
  content,
80608
80865
  dataContext: {
80609
80866
  contentEntry: content.dataContext.contentEntry,
80867
+ occurrenceContext,
80868
+ entrySubrouteContext,
80610
80869
  pageSurface: content.dataContext.pageSurface,
80611
80870
  subject: content.dataContext.subject,
80612
80871
  previewStage: preview ? "preview" : "published"