@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
@@ -4,13 +4,13 @@ import React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/preview-next/client/runtime.tsx
6
6
  const LazySdkPreviewMode = React.lazy(async () => {
7
- return { default: (await import("../../SdkPreviewModeRuntime-CA2k7Z_T.mjs").then((n) => n.n)).SdkPreviewModeRuntime };
7
+ return { default: (await import("../../SdkPreviewModeRuntime-5bCsXK2y.mjs").then((n) => n.n)).SdkPreviewModeRuntime };
8
8
  });
9
9
  const LazyPreviewShell = React.lazy(async () => {
10
- return { default: (await import("../../sdk-runtime-K8Oqj97H.mjs")).PreviewShell };
10
+ return { default: (await import("../../sdk-runtime-C8whifOy.mjs")).PreviewShell };
11
11
  });
12
12
  const LazyPreviewShellLayout = React.lazy(async () => {
13
- return { default: (await import("../../sdk-runtime-K8Oqj97H.mjs")).PreviewShellLayout };
13
+ return { default: (await import("../../sdk-runtime-C8whifOy.mjs")).PreviewShellLayout };
14
14
  });
15
15
  function SdkPreviewMode(props) {
16
16
  return /* @__PURE__ */ jsx(React.Suspense, {
@@ -1,4 +1,4 @@
1
1
  "use client";
2
2
  import "./PreviewQueryProvider-ZF6TXq5Q.mjs";
3
- import { i as PreviewShellLayout, r as PreviewShell } from "./SdkPreviewModeRuntime-CA2k7Z_T.mjs";
3
+ import { i as PreviewShellLayout, r as PreviewShell } from "./SdkPreviewModeRuntime-5bCsXK2y.mjs";
4
4
  export { PreviewShell, PreviewShellLayout };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Su as cn, vu as Primitive } from "./SiteChromeCustomizeContext-Bh9-DtMQ.mjs";
2
+ import { Tu as cn, xu as Primitive } from "./SiteChromeCustomizeContext-CO1sTK_W.mjs";
3
3
  import * as React$1 from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region ../../node_modules/.pnpm/@radix-ui+react-separator@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.17__@types+r_adfab47c9055efb8b0c4b77a2b96b053/node_modules/@radix-ui/react-separator/dist/index.mjs
@@ -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 = {
@@ -51911,15 +51945,19 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
51911
51945
  * legacy navStyle, navWeight, navColor, and navEffects settings.
51912
51946
  */
51913
51947
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
51948
+ const navPreferences = {
51949
+ typography: header.navTypography ?? "inherit",
51950
+ fontSize: header.navTextSize ?? "inherit"
51951
+ };
51914
51952
  if (header.navLinkStyle) return generateNavLinkCSS({
51915
51953
  themeId,
51916
51954
  tokens,
51917
51955
  theme,
51918
- style: contrastTreatment || navTextSize ? {
51956
+ style: mergeHeaderNavTypographyPreference(contrastTreatment || navTextSize ? {
51919
51957
  ...header.navLinkStyle,
51920
51958
  ...contrastTreatment ? { contrastTreatment } : {},
51921
51959
  ...navTextSize ? { textSize: navTextSize } : {}
51922
- } : header.navLinkStyle,
51960
+ } : header.navLinkStyle, navPreferences),
51923
51961
  className: "header-nav-link"
51924
51962
  });
51925
51963
  const navStyle = header.navStyle ?? "minimal";
@@ -51991,7 +52029,7 @@ function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment
51991
52029
  themeId,
51992
52030
  tokens,
51993
52031
  theme,
51994
- style: mergedStyle,
52032
+ style: mergeHeaderNavTypographyPreference(mergedStyle, navPreferences),
51995
52033
  className: "header-nav-link"
51996
52034
  });
51997
52035
  }
@@ -52382,6 +52420,9 @@ const boldWaveTransitionMask = svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='htt
52382
52420
  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>");
52383
52421
  function generateSiteStyleTransitionCss(themeId) {
52384
52422
  const selector = `:where([data-theme-scope="${themeId}"])`;
52423
+ const compactBoundaryHeight = requiredBoundaryHeightCss("wave-edge-gentle");
52424
+ const mediumBoundaryHeight = requiredBoundaryHeightCss("wave-edge");
52425
+ const largeBoundaryHeight = requiredBoundaryHeightCss("wave-edge-bold");
52385
52426
  return `${selector} [data-style-group^='site-style-transition-'] {
52386
52427
  position: relative;
52387
52428
  z-index: 2;
@@ -52389,23 +52430,48 @@ function generateSiteStyleTransitionCss(themeId) {
52389
52430
  --site-style-transition-to: rgb(var(--tb-background));
52390
52431
  }
52391
52432
 
52392
- ${selector} [data-block-transition][data-style-group^='site-style-transition-'] {
52433
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-'] {
52393
52434
  position: relative;
52394
52435
  z-index: 3;
52395
52436
  height: 0;
52396
52437
  pointer-events: none;
52438
+ --site-style-boundary-height: ${mediumBoundaryHeight};
52439
+ }
52440
+
52441
+ ${selector} [data-block][data-site-style-boundary-before] > :where([data-slot='section']) {
52442
+ padding-top: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-before-reserve, 0rem));
52443
+ }
52444
+
52445
+ ${selector} [data-block][data-site-style-boundary-after] > :where([data-slot='section']) {
52446
+ padding-bottom: calc(var(--rb-section-pad-y, 0rem) + var(--site-style-boundary-after-reserve, 0rem));
52447
+ }
52448
+
52449
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::before,
52450
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::before,
52451
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::before {
52452
+ content: '';
52453
+ position: absolute;
52454
+ left: 0;
52455
+ right: 0;
52456
+ top: 0;
52457
+ transform: translateY(-50%);
52458
+ z-index: 0;
52459
+ height: var(--site-style-boundary-height);
52460
+ background: var(--site-style-transition-from);
52461
+ pointer-events: none;
52397
52462
  }
52398
52463
 
52399
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after,
52400
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after,
52401
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52464
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after,
52465
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after,
52466
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52402
52467
  content: '';
52403
52468
  position: absolute;
52404
52469
  left: 0;
52405
52470
  right: 0;
52406
- bottom: -2px;
52471
+ top: 0;
52472
+ transform: translateY(-50%);
52407
52473
  z-index: 1;
52408
- height: calc(6rem + 2px);
52474
+ height: var(--site-style-boundary-height);
52409
52475
  pointer-events: none;
52410
52476
  }
52411
52477
 
@@ -52443,7 +52509,7 @@ ${selector} [data-style-group$='-to-brand-depth-band'] {
52443
52509
  --site-style-transition-to: rgb(var(--tb-primary-800));
52444
52510
  }
52445
52511
 
52446
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade']::after {
52512
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade']::after {
52447
52513
  /* Fallback for browsers without color-mix(). */
52448
52514
  background: linear-gradient(
52449
52515
  to bottom,
@@ -52459,30 +52525,37 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-sof
52459
52525
  );
52460
52526
  }
52461
52527
 
52462
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-long-']::after {
52463
- height: 10rem;
52528
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-long-'] {
52529
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-long")};
52464
52530
  }
52465
52531
 
52466
- ${selector} [data-block-transition][data-style-group^='site-style-transition-soft-fade-expansive-']::after {
52467
- height: 14rem;
52532
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-soft-fade-expansive-'] {
52533
+ --site-style-boundary-height: ${requiredBoundaryHeightCss("soft-fade-expansive")};
52468
52534
  }
52469
52535
 
52470
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-']::after {
52536
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-']::after {
52537
+ height: calc(var(--site-style-boundary-height) + 2px);
52471
52538
  background: var(--site-style-transition-to);
52472
52539
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
52473
52540
  }
52474
52541
 
52475
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52476
- height: calc(4.5rem + 2px);
52542
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-'] {
52543
+ --site-style-boundary-height: ${compactBoundaryHeight};
52544
+ }
52545
+
52546
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-subtle-']::after {
52477
52547
  clip-path: polygon(0 34%, 100% 18%, 100% 100%, 0 100%);
52478
52548
  }
52479
52549
 
52480
- ${selector} [data-block-transition][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52481
- height: calc(7rem + 2px);
52550
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-'] {
52551
+ --site-style-boundary-height: ${largeBoundaryHeight};
52552
+ }
52553
+
52554
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-angle-edge-steep-']::after {
52482
52555
  clip-path: polygon(0 54%, 100% 0%, 100% 100%, 0 100%);
52483
52556
  }
52484
52557
 
52485
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-']::after {
52558
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-']::after {
52486
52559
  background: var(--site-style-transition-to);
52487
52560
  mask-image: url("${classicWaveTransitionMask}");
52488
52561
  mask-repeat: no-repeat;
@@ -52492,28 +52565,39 @@ ${selector} [data-block-transition][data-style-group^='site-style-transition-wav
52492
52565
  -webkit-mask-size: 100% 100%;
52493
52566
  }
52494
52567
 
52495
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52568
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-balanced-']::after {
52496
52569
  mask-image: url("${balancedWaveTransitionMask}");
52497
52570
  -webkit-mask-image: url("${balancedWaveTransitionMask}");
52498
52571
  }
52499
52572
 
52500
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52501
- height: calc(4.5rem + 2px);
52573
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-'] {
52574
+ --site-style-boundary-height: ${compactBoundaryHeight};
52575
+ }
52576
+
52577
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-gentle-']::after {
52502
52578
  mask-image: url("${gentleWaveTransitionMask}");
52503
52579
  -webkit-mask-image: url("${gentleWaveTransitionMask}");
52504
52580
  }
52505
52581
 
52506
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52507
- height: calc(7rem + 2px);
52582
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-'] {
52583
+ --site-style-boundary-height: ${largeBoundaryHeight};
52584
+ }
52585
+
52586
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-bold-']::after {
52508
52587
  mask-image: url("${boldWaveTransitionMask}");
52509
52588
  -webkit-mask-image: url("${boldWaveTransitionMask}");
52510
52589
  }
52511
52590
 
52512
- ${selector} [data-block-transition][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52591
+ ${selector} [data-block-boundary][data-style-group^='site-style-transition-wave-edge-drift-']::after {
52513
52592
  mask-image: url("${driftWaveTransitionMask}");
52514
52593
  -webkit-mask-image: url("${driftWaveTransitionMask}");
52515
52594
  }`;
52516
52595
  }
52596
+ function requiredBoundaryHeightCss(transition) {
52597
+ const metrics = boundaryRuntimeMetricsForTransition(transition);
52598
+ if (!metrics) throw new Error(`Missing boundary runtime metrics for ${transition}`);
52599
+ return metrics.heightCss;
52600
+ }
52517
52601
  function svgDataUrl(svg) {
52518
52602
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
52519
52603
  }
@@ -54636,13 +54720,15 @@ function sourceLabel(source) {
54636
54720
  }
54637
54721
  //#endregion
54638
54722
  //#region ../blocks/src/PageRenderer.tsx
54639
- function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54723
+ function PageRenderer$1({ theme, page, runtimeBoundaries, usePlaceholders = false, dataContext, wrapBlock, wrapBoundary, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, customBlocks, previewAuthoring }) {
54640
54724
  const imageResolveContext = React$1.useMemo(() => resolvePageRendererImageResolveContext(dataContext), [
54641
54725
  dataContext?.imageResolveContext,
54642
54726
  dataContext?.mediaAssets,
54643
54727
  dataContext?.siteId,
54644
54728
  dataContext?.supabaseUrl
54645
54729
  ]);
54730
+ const boundaryByAdjacentBlockIds = React$1.useMemo(() => boundaryMapForAdjacentBlockIds(runtimeBoundaries ?? []), [runtimeBoundaries]);
54731
+ const usesRuntimeBoundaries = runtimeBoundaries !== void 0;
54646
54732
  if (!page || page.blocks.length === 0) return /* @__PURE__ */ jsx("div", {
54647
54733
  className: "rb-p-6 rb-caption",
54648
54734
  style: textColorStyle("mutedText"),
@@ -54654,6 +54740,17 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54654
54740
  return /* @__PURE__ */ jsx("div", { children: page.blocks.map((block, index) => {
54655
54741
  const blockPosition = pageBlockPosition(index, page.blocks.length);
54656
54742
  const blockKey = block.id ?? `${block.kind}-${index}`;
54743
+ const previousBlock = page.blocks[index - 1] ?? null;
54744
+ const nextBlock = page.blocks[index + 1] ?? null;
54745
+ const boundaryBefore = boundaryBetweenBlocks(previousBlock, block, boundaryByAdjacentBlockIds);
54746
+ const boundaryAfter = boundaryBetweenBlocks(block, nextBlock, boundaryByAdjacentBlockIds);
54747
+ const boundaryElement = renderBoundaryAfterBlock({
54748
+ block,
54749
+ nextBlock,
54750
+ blockKey,
54751
+ boundaryByAdjacentBlockIds,
54752
+ wrapBoundary
54753
+ });
54657
54754
  const cleanKind = block.kind.replace(/^block\./, "");
54658
54755
  const definition = getBlockDefinition(block.kind);
54659
54756
  const managesOwnWrapper = definition?.manifest.behaviours?.managesOwnWrapper;
@@ -54676,11 +54773,18 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54676
54773
  imageResolveContext,
54677
54774
  previewAuthoring
54678
54775
  };
54679
- if (!shouldUseWrapper) return /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, blockKey);
54776
+ if (!shouldUseWrapper) {
54777
+ const rendered = /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps }, `${blockKey}:block`);
54778
+ return boundaryElement ? /* @__PURE__ */ jsxs(React$1.Fragment, { children: [rendered, boundaryElement] }, blockKey) : rendered;
54779
+ }
54680
54780
  const wrapperClassName = [`block-${cleanKind}`, wrapBlock ? "group relative" : null].filter(Boolean).join(" ");
54681
54781
  const styleGroup = typeof renderableContent.styleGroup === "string" ? renderableContent.styleGroup : void 0;
54682
54782
  const blockLook = typeof renderableContent.blockLook === "string" ? renderableContent.blockLook : void 0;
54683
54783
  const transitionStyle = transitionCssVarsStyle(renderableContent);
54784
+ const blockStyle = mergeStyleObjects(transitionStyle, boundaryReserveCssVarsStyle({
54785
+ before: boundaryBefore,
54786
+ after: boundaryAfter
54787
+ }));
54684
54788
  const blockElement = /* @__PURE__ */ jsx("div", {
54685
54789
  className: wrapperClassName,
54686
54790
  "data-block": cleanKind,
@@ -54690,11 +54794,14 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54690
54794
  "data-block-variant": variantKey ?? void 0,
54691
54795
  "data-block-look": blockLook,
54692
54796
  "data-page-block-position": blockPosition,
54797
+ "data-site-style-boundary-before": boundaryBefore?.metrics.size,
54798
+ "data-site-style-boundary-after": boundaryAfter?.metrics.size,
54693
54799
  "data-style-group": styleGroup,
54694
- style: transitionStyle,
54800
+ style: blockStyle,
54695
54801
  children: /* @__PURE__ */ jsx(MemoBlockSection, { ...blockSectionProps })
54696
54802
  }, blockKey);
54697
- if (!isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54803
+ if (boundaryElement) return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, boundaryElement] }, blockKey);
54804
+ if (usesRuntimeBoundaries || !isSiteStyleTransitionStyleGroup(styleGroup)) return blockElement;
54698
54805
  return /* @__PURE__ */ jsxs(React$1.Fragment, { children: [blockElement, /* @__PURE__ */ jsx("div", {
54699
54806
  "aria-hidden": "true",
54700
54807
  "data-block-transition": "",
@@ -54707,6 +54814,53 @@ function PageRenderer$1({ theme, page, usePlaceholders = false, dataContext, wra
54707
54814
  function isSiteStyleTransitionStyleGroup(value) {
54708
54815
  return value?.startsWith("site-style-transition-") === true;
54709
54816
  }
54817
+ function boundaryMapForAdjacentBlockIds(boundaries) {
54818
+ return new Map(boundaries.map((boundary) => [boundaryKey(boundary.previousBlockId, boundary.nextBlockId), boundary]));
54819
+ }
54820
+ function boundaryKey(previousBlockId, nextBlockId) {
54821
+ return `${previousBlockId}\u0000${nextBlockId}`;
54822
+ }
54823
+ function boundaryBetweenBlocks(previousBlock, nextBlock, boundaryByAdjacentBlockIds) {
54824
+ const previousBlockId = previousBlock?.id ?? null;
54825
+ const nextBlockId = nextBlock?.id ?? null;
54826
+ if (!previousBlockId || !nextBlockId) return null;
54827
+ return boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId)) ?? null;
54828
+ }
54829
+ function renderBoundaryAfterBlock(input) {
54830
+ const previousBlockId = input.block.id;
54831
+ const nextBlockId = input.nextBlock?.id ?? null;
54832
+ if (!previousBlockId || !nextBlockId) return null;
54833
+ const boundary = input.boundaryByAdjacentBlockIds.get(boundaryKey(previousBlockId, nextBlockId));
54834
+ if (!boundary) return null;
54835
+ const rendered = /* @__PURE__ */ jsx("div", {
54836
+ "aria-hidden": "true",
54837
+ "data-block-boundary": "",
54838
+ "data-boundary-id": boundary.boundaryId,
54839
+ "data-boundary-previous-block-id": boundary.previousBlockId,
54840
+ "data-boundary-next-block-id": boundary.nextBlockId,
54841
+ "data-style-group": boundary.styleGroup,
54842
+ style: boundaryCssVarsStyle(boundary)
54843
+ }, `${input.blockKey}:boundary`);
54844
+ return input.wrapBoundary ? input.wrapBoundary(boundary, rendered) : rendered;
54845
+ }
54846
+ function boundaryCssVarsStyle(boundary) {
54847
+ return {
54848
+ "--site-style-transition-from": boundary.cssVars.from,
54849
+ "--site-style-transition-to": boundary.cssVars.to
54850
+ };
54851
+ }
54852
+ function boundaryReserveCssVarsStyle(input) {
54853
+ const before = input.before ? boundaryReserveValueForTreatment(input.before) : null;
54854
+ const after = input.after ? boundaryReserveValueForTreatment(input.after) : null;
54855
+ if (!before && !after) return void 0;
54856
+ return {
54857
+ ...before ? { "--site-style-boundary-before-reserve": before } : {},
54858
+ ...after ? { "--site-style-boundary-after-reserve": after } : {}
54859
+ };
54860
+ }
54861
+ function boundaryReserveValueForTreatment(boundary) {
54862
+ return boundary.metrics.reserveCss;
54863
+ }
54710
54864
  function transitionCssVarsStyle(content) {
54711
54865
  const transitionStyles = isObjectRecord(content._transitionStyles) ? content._transitionStyles : null;
54712
54866
  const cssVars = isObjectRecord(transitionStyles?.cssVars) ? transitionStyles.cssVars : null;
@@ -54718,6 +54872,14 @@ function transitionCssVarsStyle(content) {
54718
54872
  ...to ? { "--site-style-transition-to": to } : {}
54719
54873
  };
54720
54874
  }
54875
+ function mergeStyleObjects(left, right) {
54876
+ if (!left) return right;
54877
+ if (!right) return left;
54878
+ return {
54879
+ ...left,
54880
+ ...right
54881
+ };
54882
+ }
54721
54883
  function pageBlockPosition(index, blockCount) {
54722
54884
  if (blockCount <= 1) return "only";
54723
54885
  if (index === 0) return "first";
@@ -56629,52 +56791,53 @@ const containerResponsiveThemeCss = `/*
56629
56791
 
56630
56792
  /* Semantic spacing tokens (replaces Tailwind maps in src/system/spacing.ts) */
56631
56793
  .rb-section-pad-none {
56632
- padding-top: 0;
56633
- padding-bottom: 0;
56794
+ --rb-section-pad-y: 0rem;
56795
+ padding-top: var(--rb-section-pad-y);
56796
+ padding-bottom: var(--rb-section-pad-y);
56634
56797
  }
56635
56798
  .rb-section-pad-compact {
56636
- padding-top: 1.5rem;
56637
- padding-bottom: 1.5rem;
56799
+ --rb-section-pad-y: 1.5rem;
56800
+ padding-top: var(--rb-section-pad-y);
56801
+ padding-bottom: var(--rb-section-pad-y);
56638
56802
  }
56639
56803
  .rb-section-pad-cozy {
56640
- padding-top: 2.5rem;
56641
- padding-bottom: 2.5rem;
56804
+ --rb-section-pad-y: 2.5rem;
56805
+ padding-top: var(--rb-section-pad-y);
56806
+ padding-bottom: var(--rb-section-pad-y);
56642
56807
  }
56643
56808
  .rb-section-pad-medium {
56644
- padding-top: 3rem;
56645
- padding-bottom: 3rem;
56809
+ --rb-section-pad-y: 3rem;
56810
+ padding-top: var(--rb-section-pad-y);
56811
+ padding-bottom: var(--rb-section-pad-y);
56646
56812
  }
56647
56813
  .rb-section-pad-comfortable {
56648
- padding-top: 4rem;
56649
- padding-bottom: 4rem;
56814
+ --rb-section-pad-y: 4rem;
56815
+ padding-top: var(--rb-section-pad-y);
56816
+ padding-bottom: var(--rb-section-pad-y);
56650
56817
  }
56651
56818
  .rb-section-pad-spacious {
56652
- padding-top: 5rem;
56653
- padding-bottom: 5rem;
56819
+ --rb-section-pad-y: 5rem;
56820
+ padding-top: var(--rb-section-pad-y);
56821
+ padding-bottom: var(--rb-section-pad-y);
56654
56822
  }
56655
56823
 
56656
56824
  @container rb-site (min-width: 640px) {
56657
56825
 
56658
56826
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
56659
56827
  .rb-section-pad-compact {
56660
- padding-top: 2rem;
56661
- padding-bottom: 2rem;
56828
+ --rb-section-pad-y: 2rem;
56662
56829
  }
56663
56830
  .rb-section-pad-cozy {
56664
- padding-top: 3.5rem;
56665
- padding-bottom: 3.5rem;
56831
+ --rb-section-pad-y: 3.5rem;
56666
56832
  }
56667
56833
  .rb-section-pad-medium {
56668
- padding-top: 4rem;
56669
- padding-bottom: 4rem;
56834
+ --rb-section-pad-y: 4rem;
56670
56835
  }
56671
56836
  .rb-section-pad-comfortable {
56672
- padding-top: 5rem;
56673
- padding-bottom: 5rem;
56837
+ --rb-section-pad-y: 5rem;
56674
56838
  }
56675
56839
  .rb-section-pad-spacious {
56676
- padding-top: 7rem;
56677
- padding-bottom: 7rem;
56840
+ --rb-section-pad-y: 7rem;
56678
56841
  }
56679
56842
  }
56680
56843
 
@@ -58064,30 +58227,122 @@ const containerResponsiveThemeCss = `/*
58064
58227
  :where(.theme-scope) .header-logo-text {
58065
58228
  font-size: 1.125rem; /* matches rb-text-lg */
58066
58229
  line-height: 1.75rem;
58230
+ margin-inline: -0.18em;
58231
+ padding-inline: 0.18em;
58067
58232
  transition: font-size 300ms var(--motion-ease, ease);
58068
58233
  }
58069
58234
 
58070
- /* Mobile: reduce site title size (~30%) to keep header compact */
58235
+ /* Centered variant uses larger title */
58236
+ :where(.theme-scope) .header-variant-centered .header-logo-text {
58237
+ font-size: 1.25rem; /* matches rb-text-xl */
58238
+ line-height: 1.75rem;
58239
+ }
58240
+
58241
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58242
+ font-size: 0.95rem;
58243
+ line-height: 1.5rem;
58244
+ }
58245
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58246
+ font-size: 1.125rem;
58247
+ line-height: 1.75rem;
58248
+ }
58249
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58250
+ font-size: 1.35rem;
58251
+ line-height: 1.9rem;
58252
+ }
58253
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58254
+ font-size: 1.75rem;
58255
+ line-height: 2.25rem;
58256
+ }
58257
+
58258
+ :where(.theme-scope)
58259
+ .header-variant-centered
58260
+ .header-logo-size-compact
58261
+ .header-logo-text {
58262
+ font-size: 1.125rem;
58263
+ line-height: 1.75rem;
58264
+ }
58265
+ :where(.theme-scope)
58266
+ .header-variant-centered
58267
+ .header-logo-size-standard
58268
+ .header-logo-text {
58269
+ font-size: 1.25rem;
58270
+ line-height: 1.75rem;
58271
+ }
58272
+ :where(.theme-scope)
58273
+ .header-variant-centered
58274
+ .header-logo-size-generous
58275
+ .header-logo-text {
58276
+ font-size: 1.6rem;
58277
+ line-height: 2rem;
58278
+ }
58279
+ :where(.theme-scope)
58280
+ .header-variant-centered
58281
+ .header-logo-size-display
58282
+ .header-logo-text {
58283
+ font-size: 2.1rem;
58284
+ line-height: 2.5rem;
58285
+ }
58286
+
58287
+ /* Mobile: reduce site title size to keep header compact */
58071
58288
  @container rb-site (max-width: 767px) {
58072
58289
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
58073
- :where(.theme-scope) .header-logo-text {
58290
+ :where(.theme-scope) .header-logo-text,
58291
+ :where(.theme-scope) .header-logo-size-standard .header-logo-text {
58074
58292
  font-size: 0.8rem;
58075
58293
  line-height: 1.25rem;
58076
58294
  }
58077
58295
 
58078
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58296
+ :where(.theme-scope) .header-logo-size-compact .header-logo-text {
58297
+ font-size: 0.75rem;
58298
+ line-height: 1.15rem;
58299
+ }
58300
+
58301
+ :where(.theme-scope) .header-logo-size-generous .header-logo-text {
58302
+ font-size: 1rem;
58303
+ line-height: 1.4rem;
58304
+ }
58305
+
58306
+ :where(.theme-scope) .header-logo-size-display .header-logo-text {
58307
+ font-size: 1.25rem;
58308
+ line-height: 1.65rem;
58309
+ }
58310
+
58311
+ :where(.theme-scope) .header-variant-centered .header-logo-text,
58312
+ :where(.theme-scope)
58313
+ .header-variant-centered
58314
+ .header-logo-size-standard
58315
+ .header-logo-text {
58079
58316
  font-size: 0.875rem;
58080
58317
  line-height: 1.25rem;
58081
58318
  }
58319
+
58320
+ :where(.theme-scope)
58321
+ .header-variant-centered
58322
+ .header-logo-size-compact
58323
+ .header-logo-text {
58324
+ font-size: 0.8rem;
58325
+ line-height: 1.2rem;
58326
+ }
58327
+
58328
+ :where(.theme-scope)
58329
+ .header-variant-centered
58330
+ .header-logo-size-generous
58331
+ .header-logo-text {
58332
+ font-size: 1.125rem;
58333
+ line-height: 1.5rem;
58334
+ }
58335
+
58336
+ :where(.theme-scope)
58337
+ .header-variant-centered
58338
+ .header-logo-size-display
58339
+ .header-logo-text {
58340
+ font-size: 1.35rem;
58341
+ line-height: 1.75rem;
58342
+ }
58082
58343
  }
58083
58344
  }
58084
58345
 
58085
- /* Centered variant uses larger title */
58086
- :where(.theme-scope) .header-variant-centered .header-logo-text {
58087
- font-size: 1.25rem; /* matches rb-text-xl */
58088
- line-height: 1.75rem;
58089
- }
58090
-
58091
58346
  /* =================================================================
58092
58347
  Shrink on Scroll - Logo & Title
58093
58348
  ================================================================= */
@@ -66428,7 +66683,7 @@ function toPageHydrationBootstrapConfig(props) {
66428
66683
  mediaAssets: props.mediaAssets
66429
66684
  };
66430
66685
  }
66431
- 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 }) {
66686
+ 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 }) {
66432
66687
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
66433
66688
  return renderWithSdkThemeRuntime({
66434
66689
  themeRuntime,
@@ -66436,6 +66691,7 @@ function PageContent({ page, theme, themeTokens: providedTokens, siteId, resolve
66436
66691
  children: /* @__PURE__ */ jsx(PageRenderer, {
66437
66692
  theme,
66438
66693
  page,
66694
+ runtimeBoundaries,
66439
66695
  themeTokens: sdkConfig?.theme?.palette ? {
66440
66696
  ...baseTokens,
66441
66697
  palette: {