@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
@@ -11970,6 +11970,8 @@ const headerSchema = z$1.object({
11970
11970
  navStyle: headerNavStyle,
11971
11971
  navColor: themeColorTokenSchema.nullable().optional(),
11972
11972
  navWeight: navFontWeight.default("medium"),
11973
+ navTypography: z$1.enum(["body", "heading"]).optional(),
11974
+ navTextSize: navLinkStyleSchema.shape.textSize,
11973
11975
  container: headerContainerSchema,
11974
11976
  border: headerBorderSchema,
11975
11977
  shadow: componentShadowSchema.optional(),
@@ -13575,6 +13577,31 @@ function uniqueStrings(values) {
13575
13577
  }
13576
13578
  //#endregion
13577
13579
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
13580
+ function boundaryRuntimeMetrics(family, size, heightExpression) {
13581
+ return {
13582
+ family,
13583
+ size,
13584
+ heightCss: heightExpression.includes(" ") ? `calc(${heightExpression})` : heightExpression,
13585
+ reserveCss: `calc((${heightExpression}) / 2)`
13586
+ };
13587
+ }
13588
+ const sectionBoundaryRuntimeMetricsByTransition = {
13589
+ none: null,
13590
+ "soft-fade-short": boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"),
13591
+ "soft-fade-long": boundaryRuntimeMetrics("gradient", "spacious", "10rem"),
13592
+ "soft-fade-expansive": boundaryRuntimeMetrics("gradient", "expansive", "14rem"),
13593
+ "wave-edge": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13594
+ "wave-edge-balanced": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13595
+ "wave-edge-gentle": boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"),
13596
+ "wave-edge-bold": boundaryRuntimeMetrics("wave", "large", "7rem + 2px"),
13597
+ "wave-edge-drift": boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"),
13598
+ "angle-edge": boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"),
13599
+ "angle-edge-subtle": boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"),
13600
+ "angle-edge-steep": boundaryRuntimeMetrics("angle", "large", "7rem + 2px")
13601
+ };
13602
+ function boundaryRuntimeMetricsForTransition(transition) {
13603
+ return sectionBoundaryRuntimeMetricsByTransition[transition];
13604
+ }
13578
13605
  const noneBoundaryOption = {
13579
13606
  id: asBoundaryOptionId("break:none"),
13580
13607
  label: "None",
@@ -13736,12 +13763,12 @@ function validateUniquePageDesignPins(intent, ctx) {
13736
13763
  label: "block Look pin"
13737
13764
  });
13738
13765
  addDuplicateStringIssues(ctx, {
13739
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
13766
+ values: intent.boundaryPins.map((pin) => boundaryKey$1(pin.previousBlockId, pin.nextBlockId)),
13740
13767
  path: ["boundaryPins"],
13741
13768
  label: "boundary pin"
13742
13769
  });
13743
13770
  }
13744
- function boundaryKey(previousBlockId, nextBlockId) {
13771
+ function boundaryKey$1(previousBlockId, nextBlockId) {
13745
13772
  return makeBoundaryId(previousBlockId, nextBlockId);
13746
13773
  }
13747
13774
  //#endregion
@@ -14262,7 +14289,7 @@ const overlayLogoAccommodations = [
14262
14289
  * optional nested styling fields that would otherwise leak from another Look.
14263
14290
  */
14264
14291
  function baseHeader(theme) {
14265
- const { navLinkStyle: _navLinkStyle, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
14292
+ 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;
14266
14293
  return {
14267
14294
  ...header,
14268
14295
  navContainer: {
@@ -17951,6 +17978,15 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
17951
17978
  });
17952
17979
  }
17953
17980
  //#endregion
17981
+ //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
17982
+ function mergeHeaderNavTypographyPreference(style, preferences) {
17983
+ return preferences.typography === "inherit" && preferences.fontSize === "inherit" ? style : {
17984
+ ...style,
17985
+ ...preferences.typography === "inherit" ? {} : { typography: preferences.typography },
17986
+ ...preferences.fontSize === "inherit" ? {} : { textSize: preferences.fontSize }
17987
+ };
17988
+ }
17989
+ //#endregion
17954
17990
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
17955
17991
  const themeTokenRecipeOptions = {
17956
17992
  palette: [
@@ -48935,15 +48971,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
48935
48971
  * legacy navStyle, navWeight, navColor, and navEffects settings.
48936
48972
  */
48937
48973
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
48974
+ const navPreferences = {
48975
+ typography: header.navTypography ?? "inherit",
48976
+ fontSize: header.navTextSize ?? "inherit"
48977
+ };
48938
48978
  if (header.navLinkStyle) return generateNavLinkCSS({
48939
48979
  themeId,
48940
48980
  tokens,
48941
48981
  theme,
48942
- style: contrastTreatment || navTextSize ? {
48982
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
48943
48983
  ...header.navLinkStyle,
48944
48984
  ...contrastTreatment ? { contrastTreatment } : {},
48945
48985
  ...navTextSize ? { textSize: navTextSize } : {}
48946
- } : header.navLinkStyle,
48986
+ } : header.navLinkStyle, navPreferences),
48947
48987
  className: "header-nav-link"
48948
48988
  });
48949
48989
  const navStyle = header.navStyle ?? "minimal";
@@ -49015,7 +49055,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
49015
49055
  themeId,
49016
49056
  tokens,
49017
49057
  theme,
49018
- style: mergedStyle,
49058
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
49019
49059
  className: "header-nav-link"
49020
49060
  });
49021
49061
  }
@@ -49406,6 +49446,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
49406
49446
  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>");
49407
49447
  function generateSiteStyleTransitionCss(themeId) {
49408
49448
  const selector = `:where([data-theme-scope="${themeId}"])`;
49449
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
49450
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
49451
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
49409
49452
  return `${selector} [data-style-group^='site-style-transition-'] {
49410
49453
  position: relative;
49411
49454
  z-index: 2;
@@ -49413,23 +49456,48 @@ function generateSiteStyleTransitionCss(themeId) {
49413
49456
  --site-style-transition-to: rgb(var(--tb-background));
49414
49457
  }
49415
49458
 
49416
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
49459
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
49417
49460
  position: relative;
49418
49461
  z-index: 3;
49419
49462
  height: 0;
49420
49463
  pointer-events: none;
49464
+ --site-style-boundary-height: ${mediumBoundaryHeight};
49465
+ }
49466
+
49467
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
49468
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
49469
+ }
49470
+
49471
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
49472
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
49473
+ }
49474
+
49475
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
49476
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
49477
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
49478
+ content: '';
49479
+ position: absolute;
49480
+ left: 0;
49481
+ right: 0;
49482
+ top: 0;
49483
+ transform: translateY(-50%);
49484
+ z-index: 0;
49485
+ height: var(--site-style-boundary-height);
49486
+ background: var(--site-style-transition-from);
49487
+ pointer-events: none;
49421
49488
  }
49422
49489
 
49423
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
49424
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
49425
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
49490
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
49491
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
49492
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
49426
49493
  content: '';
49427
49494
  position: absolute;
49428
49495
  left: 0;
49429
49496
  right: 0;
49430
- bottom: -2px;
49497
+ top: 0;
49498
+ transform: translateY(-50%);
49431
49499
  z-index: 1;
49432
- height: calc(6rem + 2px);
49500
+ height: var(--site-style-boundary-height);
49433
49501
  pointer-events: none;
49434
49502
  }
49435
49503
 
@@ -49467,7 +49535,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
49467
49535
  --site-style-transition-to: rgb(var(--tb-primary-800));
49468
49536
  }
49469
49537
 
49470
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
49538
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
49471
49539
  /* Fallback for browsers without color-mix(). */
49472
49540
  background: linear-gradient(
49473
49541
  to bottom,
@@ -49483,30 +49551,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
49483
49551
  );
49484
49552
  }
49485
49553
 
49486
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
49487
- height: 10rem;
49554
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
49555
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
49488
49556
  }
49489
49557
 
49490
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
49491
- height: 14rem;
49558
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
49559
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
49492
49560
  }
49493
49561
 
49494
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
49562
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
49563
+ height: calc(var(--site-style-boundary-height) + 2px);
49495
49564
  background: var(--site-style-transition-to);
49496
49565
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
49497
49566
  }
49498
49567
 
49499
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
49500
- height: calc(4.5rem + 2px);
49568
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
49569
+ --site-style-boundary-height: ${compactBoundaryHeight};
49570
+ }
49571
+
49572
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
49501
49573
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
49502
49574
  }
49503
49575
 
49504
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
49505
- height: calc(7rem + 2px);
49576
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
49577
+ --site-style-boundary-height: ${largeBoundaryHeight};
49578
+ }
49579
+
49580
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
49506
49581
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
49507
49582
  }
49508
49583
 
49509
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
49584
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
49510
49585
  background: var(--site-style-transition-to);
49511
49586
  mask-image: url("${classicWaveTransitionMask}");
49512
49587
  mask-repeat: no-repeat;
@@ -49516,28 +49591,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
49516
49591
  -webkit-mask-size: 100% 100%;
49517
49592
  }
49518
49593
 
49519
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
49594
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
49520
49595
  mask-image: url("${balancedWaveTransitionMask}");
49521
49596
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
49522
49597
  }
49523
49598
 
49524
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
49525
- height: calc(4.5rem + 2px);
49599
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
49600
+ --site-style-boundary-height: ${compactBoundaryHeight};
49601
+ }
49602
+
49603
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
49526
49604
  mask-image: url("${gentleWaveTransitionMask}");
49527
49605
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
49528
49606
  }
49529
49607
 
49530
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
49531
- height: calc(7rem + 2px);
49608
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
49609
+ --site-style-boundary-height: ${largeBoundaryHeight};
49610
+ }
49611
+
49612
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
49532
49613
  mask-image: url("${boldWaveTransitionMask}");
49533
49614
  -webkit-mask-image: url("${boldWaveTransitionMask}");
49534
49615
  }
49535
49616
 
49536
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
49617
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
49537
49618
  mask-image: url("${driftWaveTransitionMask}");
49538
49619
  -webkit-mask-image: url("${driftWaveTransitionMask}");
49539
49620
  }`;
49540
49621
  }
49622
+ function requiredBoundaryHeightCss(transition) {
49623
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
49624
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
49625
+ return metrics.heightCss;
49626
+ }
49541
49627
  function svgDataUrl(svg) {
49542
49628
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
49543
49629
  }
@@ -51660,13 +51746,15 @@ function sourceLabel(source) {
51660
51746
  }
51661
51747
  //#endregion
51662
51748
  //#region ../blocks/src/PageRenderer.tsx
51663
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
51749
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
51664
51750
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
51665
51751
  dataContext?.imageResolveContext,
51666
51752
  dataContext?.mediaAssets,
51667
51753
  dataContext?.siteId,
51668
51754
  dataContext?.supabaseUrl
51669
51755
  ]);
51756
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
51757
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
51670
51758
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
51671
51759
  className: "rb-p-6 rb-caption",
51672
51760
  style: textColorStyle("mutedText"),
@@ -51678,6 +51766,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51678
51766
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
51679
51767
  const blockPosition = pageBlockPosition(index, page.blocks.length);
51680
51768
  const blockKey = block.id ?? `${block.kind}-${index}`;
51769
+ const previousBlock = page.blocks[index - 1] ?? null;
51770
+ const nextBlock = page.blocks[index + 1] ?? null;
51771
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
51772
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
51773
+ const boundaryElement = renderBoundaryAfterBlock({
51774
+ block,
51775
+ nextBlock,
51776
+ blockKey,
51777
+ boundaryByAdjacentBlockIds,
51778
+ wrapBoundary
51779
+ });
51681
51780
  const cleanKind = block.kind.replace(/^block\./, "");
51682
51781
  const definition = getBlockDefinition(block.kind);
51683
51782
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -51700,11 +51799,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51700
51799
  imageResolveContext,
51701
51800
  previewAuthoring
51702
51801
  };
51703
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
51802
+ if (!shouldUseWrapper) {
51803
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
51804
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
51805
+ }
51704
51806
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
51705
51807
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
51706
51808
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
51707
51809
  const transitionStyle = transitionCssVarsStyle(renderableContent);
51810
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
51811
+ before: boundaryBefore,
51812
+ after: boundaryAfter
51813
+ }));
51708
51814
  const blockElement = /* @__PURE__ */ jsx("div", {
51709
51815
  className: wrapperClassName,
51710
51816
  "data-block": cleanKind,
@@ -51714,11 +51820,14 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51714
51820
  "data-block-variant": variantKey ?? void 0,
51715
51821
  "data-block-look": blockLook,
51716
51822
  "data-page-block-position": blockPosition,
51823
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
51824
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
51717
51825
  "data-style-group": styleGroup,
51718
- style: transitionStyle,
51826
+ style: blockStyle,
51719
51827
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
51720
51828
  }, blockKey);
51721
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
51829
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
51830
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
51722
51831
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
51723
51832
  "aria-hidden": "true",
51724
51833
  "data-block-transition": "",
@@ -51731,6 +51840,53 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
51731
51840
  function isSiteStyleTransitionStyleGroup(value) {
51732
51841
  return value?.startsWith("site-style-transition-") === true;
51733
51842
  }
51843
+ function boundaryMapForAdjacentBlockIds(boundaries) {
51844
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
51845
+ }
51846
+ function boundaryKey(previousBlockId, nextBlockId) {
51847
+ return `${previousBlockId}\u0000${nextBlockId}`;
51848
+ }
51849
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
51850
+ const previousBlockId = previousBlock?.id ?? null;
51851
+ const nextBlockId = nextBlock?.id ?? null;
51852
+ if (!previousBlockId || !nextBlockId) return null;
51853
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
51854
+ }
51855
+ function renderBoundaryAfterBlock(input) {
51856
+ const previousBlockId = input.block.id;
51857
+ const nextBlockId = input.nextBlock?.id ?? null;
51858
+ if (!previousBlockId || !nextBlockId) return null;
51859
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
51860
+ if (!boundary) return null;
51861
+ const rendered = /* @__PURE__ */ jsx("div", {
51862
+ "aria-hidden": "true",
51863
+ "data-block-boundary": "",
51864
+ "data-boundary-id": boundary.boundaryId,
51865
+ "data-boundary-previous-block-id": boundary.previousBlockId,
51866
+ "data-boundary-next-block-id": boundary.nextBlockId,
51867
+ "data-style-group": boundary.styleGroup,
51868
+ style: boundaryCssVarsStyle(boundary)
51869
+ }, `${input.blockKey}:boundary`);
51870
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
51871
+ }
51872
+ function boundaryCssVarsStyle(boundary) {
51873
+ return {
51874
+ "--site-style-transition-from": boundary.cssVars.from,
51875
+ "--site-style-transition-to": boundary.cssVars.to
51876
+ };
51877
+ }
51878
+ function boundaryReserveCssVarsStyle(input) {
51879
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
51880
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
51881
+ if (!before && !after) return void 0;
51882
+ return {
51883
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
51884
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
51885
+ };
51886
+ }
51887
+ function boundaryReserveValueForTreatment(boundary) {
51888
+ return boundary.metrics.reserveCss;
51889
+ }
51734
51890
  function transitionCssVarsStyle(content) {
51735
51891
  const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
51736
51892
  const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
@@ -51742,6 +51898,14 @@ function transitionCssVarsStyle(content) {
51742
51898
  ...to ? { "--site-style-transition-to": to } : {}
51743
51899
  };
51744
51900
  }
51901
+ function mergeStyleObjects(left, right) {
51902
+ if (!left) return right;
51903
+ if (!right) return left;
51904
+ return {
51905
+ ...left,
51906
+ ...right
51907
+ };
51908
+ }
51745
51909
  function pageBlockPosition(index, blockCount) {
51746
51910
  if (blockCount <= 1) return "only";
51747
51911
  if (index === 0) return "first";
@@ -53690,52 +53854,53 @@ const containerResponsiveThemeCss = `/*
53690
53854
 
53691
53855
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
53692
53856
  .rb-section-pad-none {
53693
- padding-top: 0;
53694
- padding-bottom: 0;
53857
+ --rb-section-pad-y: 0rem;
53858
+ padding-top: var(--rb-section-pad-y);
53859
+ padding-bottom: var(--rb-section-pad-y);
53695
53860
  }
53696
53861
  .rb-section-pad-compact {
53697
- padding-top: 1.5rem;
53698
- padding-bottom: 1.5rem;
53862
+ --rb-section-pad-y: 1.5rem;
53863
+ padding-top: var(--rb-section-pad-y);
53864
+ padding-bottom: var(--rb-section-pad-y);
53699
53865
  }
53700
53866
  .rb-section-pad-cozy {
53701
- padding-top: 2.5rem;
53702
- padding-bottom: 2.5rem;
53867
+ --rb-section-pad-y: 2.5rem;
53868
+ padding-top: var(--rb-section-pad-y);
53869
+ padding-bottom: var(--rb-section-pad-y);
53703
53870
  }
53704
53871
  .rb-section-pad-medium {
53705
- padding-top: 3rem;
53706
- padding-bottom: 3rem;
53872
+ --rb-section-pad-y: 3rem;
53873
+ padding-top: var(--rb-section-pad-y);
53874
+ padding-bottom: var(--rb-section-pad-y);
53707
53875
  }
53708
53876
  .rb-section-pad-comfortable {
53709
- padding-top: 4rem;
53710
- padding-bottom: 4rem;
53877
+ --rb-section-pad-y: 4rem;
53878
+ padding-top: var(--rb-section-pad-y);
53879
+ padding-bottom: var(--rb-section-pad-y);
53711
53880
  }
53712
53881
  .rb-section-pad-spacious {
53713
- padding-top: 5rem;
53714
- padding-bottom: 5rem;
53882
+ --rb-section-pad-y: 5rem;
53883
+ padding-top: var(--rb-section-pad-y);
53884
+ padding-bottom: var(--rb-section-pad-y);
53715
53885
  }
53716
53886
 
53717
53887
  @container rb-site (min-width: 640px) {
53718
53888
 
53719
53889
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
53720
53890
  .rb-section-pad-compact {
53721
- padding-top: 2rem;
53722
- padding-bottom: 2rem;
53891
+ --rb-section-pad-y: 2rem;
53723
53892
  }
53724
53893
  .rb-section-pad-cozy {
53725
- padding-top: 3.5rem;
53726
- padding-bottom: 3.5rem;
53894
+ --rb-section-pad-y: 3.5rem;
53727
53895
  }
53728
53896
  .rb-section-pad-medium {
53729
- padding-top: 4rem;
53730
- padding-bottom: 4rem;
53897
+ --rb-section-pad-y: 4rem;
53731
53898
  }
53732
53899
  .rb-section-pad-comfortable {
53733
- padding-top: 5rem;
53734
- padding-bottom: 5rem;
53900
+ --rb-section-pad-y: 5rem;
53735
53901
  }
53736
53902
  .rb-section-pad-spacious {
53737
- padding-top: 7rem;
53738
- padding-bottom: 7rem;
53903
+ --rb-section-pad-y: 7rem;
53739
53904
  }
53740
53905
  }
53741
53906
 
@@ -55125,30 +55290,122 @@ const containerResponsiveThemeCss = `/*
55125
55290
  :where(.theme-scope) .header-logo-text {
55126
55291
  font-size: 1.125rem; /* matches rb-text-lg */
55127
55292
  line-height: 1.75rem;
55293
+ margin-inline: -0.18em;
55294
+ padding-inline: 0.18em;
55128
55295
  transition: font-size 300ms var(--motion-ease, ease);
55129
55296
  }
55130
55297
 
55131
- /* Mobile: reduce site title size (~30%) to keep header compact */
55298
+ /* Centered variant uses larger title */
55299
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
55300
+ font-size: 1.25rem; /* matches rb-text-xl */
55301
+ line-height: 1.75rem;
55302
+ }
55303
+
55304
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
55305
+ font-size: 0.95rem;
55306
+ line-height: 1.5rem;
55307
+ }
55308
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
55309
+ font-size: 1.125rem;
55310
+ line-height: 1.75rem;
55311
+ }
55312
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
55313
+ font-size: 1.35rem;
55314
+ line-height: 1.9rem;
55315
+ }
55316
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
55317
+ font-size: 1.75rem;
55318
+ line-height: 2.25rem;
55319
+ }
55320
+
55321
+ :where(.theme-scope)
55322
+ .header-variant-centered
55323
+ .header-logo-size-compact
55324
+ .header-logo-text {
55325
+ font-size: 1.125rem;
55326
+ line-height: 1.75rem;
55327
+ }
55328
+ :where(.theme-scope)
55329
+ .header-variant-centered
55330
+ .header-logo-size-standard
55331
+ .header-logo-text {
55332
+ font-size: 1.25rem;
55333
+ line-height: 1.75rem;
55334
+ }
55335
+ :where(.theme-scope)
55336
+ .header-variant-centered
55337
+ .header-logo-size-generous
55338
+ .header-logo-text {
55339
+ font-size: 1.6rem;
55340
+ line-height: 2rem;
55341
+ }
55342
+ :where(.theme-scope)
55343
+ .header-variant-centered
55344
+ .header-logo-size-display
55345
+ .header-logo-text {
55346
+ font-size: 2.1rem;
55347
+ line-height: 2.5rem;
55348
+ }
55349
+
55350
+ /* Mobile: reduce site title size to keep header compact */
55132
55351
  @container rb-site (max-width: 767px) {
55133
55352
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
55134
- :where(.theme-scope) .header-logo-text {
55353
+ :where(.theme-scope) .header-logo-text,
55354
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
55135
55355
  font-size: 0.8rem;
55136
55356
  line-height: 1.25rem;
55137
55357
  }
55138
55358
 
55139
- :where(.theme-scope) .header-variant-centered .header-logo-text {
55359
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
55360
+ font-size: 0.75rem;
55361
+ line-height: 1.15rem;
55362
+ }
55363
+
55364
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
55365
+ font-size: 1rem;
55366
+ line-height: 1.4rem;
55367
+ }
55368
+
55369
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
55370
+ font-size: 1.25rem;
55371
+ line-height: 1.65rem;
55372
+ }
55373
+
55374
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
55375
+ :where(.theme-scope)
55376
+ .header-variant-centered
55377
+ .header-logo-size-standard
55378
+ .header-logo-text {
55140
55379
  font-size: 0.875rem;
55141
55380
  line-height: 1.25rem;
55142
55381
  }
55382
+
55383
+ :where(.theme-scope)
55384
+ .header-variant-centered
55385
+ .header-logo-size-compact
55386
+ .header-logo-text {
55387
+ font-size: 0.8rem;
55388
+ line-height: 1.2rem;
55389
+ }
55390
+
55391
+ :where(.theme-scope)
55392
+ .header-variant-centered
55393
+ .header-logo-size-generous
55394
+ .header-logo-text {
55395
+ font-size: 1.125rem;
55396
+ line-height: 1.5rem;
55397
+ }
55398
+
55399
+ :where(.theme-scope)
55400
+ .header-variant-centered
55401
+ .header-logo-size-display
55402
+ .header-logo-text {
55403
+ font-size: 1.35rem;
55404
+ line-height: 1.75rem;
55405
+ }
55143
55406
  }
55144
55407
  }
55145
55408
 
55146
- /* Centered variant uses larger title */
55147
- :where(.theme-scope) .header-variant-centered .header-logo-text {
55148
- font-size: 1.25rem; /* matches rb-text-xl */
55149
- line-height: 1.75rem;
55150
- }
55151
-
55152
55409
  /* =================================================================
55153
55410
  Shrink on Scroll - Logo & Title
55154
55411
  ================================================================= */
@@ -63445,7 +63702,7 @@ function renderWithSdkThemeRuntime({ themeRuntime, theme, children }) {
63445
63702
  }
63446
63703
  //#endregion
63447
63704
  //#region src/rendering/components/pageShared.tsx
63448
- 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 }) {
63705
+ 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 }) {
63449
63706
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
63450
63707
  return renderWithSdkThemeRuntime({
63451
63708
  themeRuntime,
@@ -63453,6 +63710,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
63453
63710
  children: /* @__PURE__ */ jsx(PageRenderer, {
63454
63711
  theme,
63455
63712
  page,
63713
+ runtimeBoundaries,
63456
63714
  themeTokens: sdkConfig?.theme?.palette ? {
63457
63715
  ...baseTokens,
63458
63716
  palette: {