@riverbankcms/sdk 0.72.0 → 0.74.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 (102) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-44T64SAR.mjs → PreviewEditorSidebar-5XL7M3OM.mjs} +2 -2
  3. package/dist/{PreviewEditorUI-4WKHZTXW.mjs → PreviewEditorUI-ZDFRDJID.mjs} +2 -2
  4. package/dist/SdkPreviewModeRuntime-CRYNDSPL.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +10 -10
  6. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +6 -6
  7. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +15 -1
  8. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +11 -0
  9. package/dist/_dts/blocks/src/system/runtime/header/enhanceHeaderSection.d.ts +13 -0
  10. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +6 -0
  11. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  12. package/dist/_dts/sdk/src/rendering/islands/enhancers/accordion.d.ts +1 -0
  13. package/dist/_dts/sdk/src/rendering/islands/enhancers/bookingForm.d.ts +1 -0
  14. package/dist/_dts/sdk/src/rendering/islands/enhancers/carousel.d.ts +1 -0
  15. package/dist/_dts/sdk/src/rendering/islands/enhancers/cart.d.ts +1 -0
  16. package/dist/_dts/sdk/src/rendering/islands/enhancers/checkout.d.ts +1 -0
  17. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +1 -0
  18. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventCalendar.d.ts +1 -0
  19. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventCombined.d.ts +1 -0
  20. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventDetails.d.ts +1 -0
  21. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventListing.d.ts +1 -0
  22. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventRegistration.d.ts +1 -0
  23. package/dist/_dts/sdk/src/rendering/islands/enhancers/form.d.ts +1 -0
  24. package/dist/_dts/sdk/src/rendering/islands/enhancers/headerSection.d.ts +1 -0
  25. package/dist/_dts/sdk/src/rendering/islands/enhancers/locationMap.d.ts +1 -0
  26. package/dist/_dts/sdk/src/rendering/islands/enhancers/newsletterForm.d.ts +1 -0
  27. package/dist/_dts/sdk/src/rendering/islands/enhancers/productDetail.d.ts +1 -0
  28. package/dist/_dts/sdk/src/rendering/islands/enhancers/productList.d.ts +1 -0
  29. package/dist/_dts/sdk/src/rendering/islands/enhancers/shop.d.ts +1 -0
  30. package/dist/_dts/sdk/src/rendering/islands/hydrateBlocksIslands.d.ts +2 -2
  31. package/dist/_dts/sdk/src/rendering/islands/propsDecoder.d.ts +7 -0
  32. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +9 -0
  33. package/dist/_dts/sdk/src/version.d.ts +1 -1
  34. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  35. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +7 -7
  36. package/dist/_dts/theme-core/src/buttons/types.d.ts +20 -20
  37. package/dist/_dts/theme-core/src/cards/types.d.ts +2 -2
  38. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  39. package/dist/_dts/theme-core/src/header/navDropdownSizing.d.ts +7 -0
  40. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  41. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  42. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +156 -156
  43. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  44. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +4 -4
  45. package/dist/_dts/theme-core/src/schema.d.ts +178 -178
  46. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +2 -2
  47. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +8 -8
  48. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +5 -5
  49. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  50. package/dist/{chunk-3YNCQG5N.mjs → chunk-2MIWNFJM.mjs} +149 -15
  51. package/dist/{chunk-KWQPAJYS.mjs → chunk-CBD47MTM.mjs} +1 -1
  52. package/dist/{chunk-HV745JYE.mjs → chunk-CEQBBLMJ.mjs} +1 -1
  53. package/dist/{chunk-G4NLITC2.mjs → chunk-YY7K3QD2.mjs} +5 -5
  54. package/dist/cli/index.mjs +233 -203
  55. package/dist/client/accordion-ZZVXWV3N.mjs +120 -0
  56. package/dist/client/altcha-LIGLPZS5.mjs +2755 -0
  57. package/dist/client/bookingForm-4X77HKDS.mjs +34 -0
  58. package/dist/client/bookings.mjs +13 -0
  59. package/dist/client/carousel-25WK2H7G.mjs +46 -0
  60. package/dist/client/cart-JWD2VRFU.mjs +11 -0
  61. package/dist/client/checkout-V7KYGWL7.mjs +11 -0
  62. package/dist/client/chunk-5IYGMTUE.mjs +18614 -0
  63. package/dist/client/chunk-6VGXRE34.mjs +7617 -0
  64. package/dist/client/chunk-N7PBWBWQ.mjs +26 -0
  65. package/dist/client/chunk-PMAIXMAB.mjs +1960 -0
  66. package/dist/client/chunk-RKCFVIMS.mjs +26 -0
  67. package/dist/client/client.mjs +621 -379
  68. package/dist/client/courseRegistration-O6ZPK4YT.mjs +29 -0
  69. package/dist/client/eventCalendar-X6GIPYFM.mjs +29 -0
  70. package/dist/client/eventCombined-EZUOPM3G.mjs +26 -0
  71. package/dist/client/eventDetails-3WODIXET.mjs +14 -0
  72. package/dist/client/eventListing-HEFGAETC.mjs +29 -0
  73. package/dist/client/eventRegistration-3LCP2V3P.mjs +29 -0
  74. package/dist/client/form-AKXQMY6Z.mjs +85 -0
  75. package/dist/client/headerSection-5KHCMU6B.mjs +12 -0
  76. package/dist/client/hooks.mjs +42 -9
  77. package/dist/client/locationMap-7HIADW76.mjs +14 -0
  78. package/dist/client/newsletterForm-5N4YTMU3.mjs +60 -0
  79. package/dist/client/productDetail-IZUA7ZP3.mjs +11 -0
  80. package/dist/client/productList-KWIIJE6I.mjs +11 -0
  81. package/dist/client/rendering/client.mjs +1655 -6472
  82. package/dist/client/rendering/islands.mjs +40 -44031
  83. package/dist/client/rendering.mjs +2909 -2663
  84. package/dist/client/shop-XZQFRQWZ.mjs +13 -0
  85. package/dist/preview-next/client/runtime.mjs +3 -3
  86. package/dist/{sdk-runtime-NGDWSWOS.mjs → sdk-runtime-OHNONZ5U.mjs} +4 -4
  87. package/dist/server/components.mjs +64 -11
  88. package/dist/server/config-validation.mjs +42 -9
  89. package/dist/server/config.mjs +42 -9
  90. package/dist/server/data.mjs +42 -9
  91. package/dist/server/index.mjs +1 -1
  92. package/dist/server/next.mjs +65 -12
  93. package/dist/server/page-converter.mjs +29 -9
  94. package/dist/server/prebuild.mjs +1 -1
  95. package/dist/server/rendering/server.mjs +64 -11
  96. package/dist/server/rendering.mjs +64 -11
  97. package/dist/server/routing.mjs +50 -10
  98. package/dist/server/server.mjs +43 -10
  99. package/dist/server/theme-bridge.mjs +24 -0
  100. package/dist/styles/index.css +11 -0
  101. package/package.json +1 -1
  102. package/dist/SdkPreviewModeRuntime-FO6V7YVY.mjs +0 -8
@@ -16287,7 +16287,9 @@ function backgroundLayer(path, options = {}) {
16287
16287
  imageClassName,
16288
16288
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
16289
16289
  fallbackToken,
16290
- omitImageLayer = false
16290
+ omitImageLayer = false,
16291
+ imageLoading,
16292
+ imageFetchPriority
16291
16293
  } = options;
16292
16294
  const styleLayer = el("div", {
16293
16295
  className: styleClassName,
@@ -16303,11 +16305,14 @@ function backgroundLayer(path, options = {}) {
16303
16305
  }
16304
16306
  }
16305
16307
  });
16306
- const imageLayer = createBackgroundImageNode(path, imageClassName);
16308
+ const imageLayer = createBackgroundImageNode(path, imageClassName, {
16309
+ loading: imageLoading,
16310
+ fetchPriority: imageFetchPriority
16311
+ });
16307
16312
  const overlayLayer = createBackgroundOverlayNode(path, overlayClassName);
16308
16313
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
16309
16314
  }
16310
- function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10") {
16315
+ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
16311
16316
  const imagePath = `${path}.image`;
16312
16317
  return media(
16313
16318
  {
@@ -16328,7 +16333,9 @@ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-1
16328
16333
  transforms: [{ id: "background.resolveImageStyle" }]
16329
16334
  }
16330
16335
  },
16331
- videoPlayback: "background"
16336
+ videoPlayback: "background",
16337
+ ...options.loading ? { loading: options.loading } : {},
16338
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
16332
16339
  },
16333
16340
  when(imagePath),
16334
16341
  bind(imagePath)
@@ -16525,12 +16532,16 @@ function styledSection(config) {
16525
16532
  bindFrom = "_sectionStyles",
16526
16533
  imageClassName = "rb-absolute rb-z-neg-10",
16527
16534
  renderBackgroundImage = true,
16535
+ backgroundImageLoading,
16536
+ backgroundImageFetchPriority,
16528
16537
  fullWidthPath
16529
16538
  } = config;
16530
16539
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
16531
16540
  imageClassName,
16532
16541
  fallbackToken: background,
16533
- omitImageLayer: !renderBackgroundImage
16542
+ omitImageLayer: !renderBackgroundImage,
16543
+ imageLoading: backgroundImageLoading,
16544
+ imageFetchPriority: backgroundImageFetchPriority
16534
16545
  });
16535
16546
  const childrenArray = Array.isArray(children) ? children : [children];
16536
16547
  return section(
@@ -16745,7 +16756,7 @@ function navRow(opts) {
16745
16756
  el(
16746
16757
  "div",
16747
16758
  {
16748
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
16759
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
16749
16760
  id: dropdownMenuId
16750
16761
  },
16751
16762
  [dropdownLinks]
@@ -20320,6 +20331,10 @@ var heroCopyAndCta = composeFragments([
20320
20331
  { fragment: heroCopyFragment },
20321
20332
  { fragment: heroCtaRowFragment }
20322
20333
  ]);
20334
+ var heroPriorityMediaProps = {
20335
+ loading: "eager",
20336
+ fetchPriority: "high"
20337
+ };
20323
20338
  var heroContentNodes = heroCopyAndCta.layout;
20324
20339
  function heroContentCard(children, gap) {
20325
20340
  return styledContainer({
@@ -20382,7 +20397,8 @@ function heroSplitImagePane() {
20382
20397
  [
20383
20398
  media(
20384
20399
  {
20385
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
20400
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
20401
+ ...heroPriorityMediaProps
20386
20402
  },
20387
20403
  when("_sectionStyles.background.image"),
20388
20404
  bind("_sectionStyles.background.image")
@@ -20393,13 +20409,17 @@ function heroSplitImagePane() {
20393
20409
  var classicLayout = styledSection({
20394
20410
  children: heroContainerStack(heroContentNodes, "md"),
20395
20411
  // styledContainer (rb-container) already provides horizontal padding
20396
- baseClass: ""
20412
+ baseClass: "",
20413
+ backgroundImageLoading: heroPriorityMediaProps.loading,
20414
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
20397
20415
  });
20398
20416
  var microLayout = styledSection({
20399
20417
  children: heroContainerStack(heroContentNodes, "sm"),
20400
20418
  // styledContainer (rb-container) already provides horizontal padding
20401
20419
  baseClass: "",
20402
- spacing: "compact"
20420
+ spacing: "compact",
20421
+ backgroundImageLoading: heroPriorityMediaProps.loading,
20422
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
20403
20423
  });
20404
20424
  function splitLayoutWith(children) {
20405
20425
  return styledSection({
@@ -28098,6 +28118,8 @@ var MediaNodeServer = ({
28098
28118
  className,
28099
28119
  style,
28100
28120
  videoPlayback = "inline",
28121
+ loading = "lazy",
28122
+ fetchPriority,
28101
28123
  size = ImagePresets.full,
28102
28124
  fieldPath,
28103
28125
  blockKind,
@@ -28134,7 +28156,8 @@ var MediaNodeServer = ({
28134
28156
  alt: value.alt ?? "",
28135
28157
  className,
28136
28158
  style: computedStyle,
28137
- loading: "lazy",
28159
+ loading,
28160
+ fetchPriority,
28138
28161
  decoding: "async"
28139
28162
  }
28140
28163
  );
@@ -36045,6 +36068,7 @@ var VideoEmbedNode = ({
36045
36068
  height: "100%",
36046
36069
  border: "none"
36047
36070
  },
36071
+ loading: "lazy",
36048
36072
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
36049
36073
  referrerPolicy: "no-referrer-when-downgrade",
36050
36074
  allowFullScreen: true
@@ -39467,6 +39491,10 @@ function getAbsoluteSegments(fromPath, context) {
39467
39491
  if (scoped?.basePathSegments && scoped.basePathSegments.length > 0) {
39468
39492
  return [...scoped.basePathSegments, ...rest];
39469
39493
  }
39494
+ const hasContentScope = context.scopes.some((entry) => entry.name === "content");
39495
+ if (hasContentScope && !(first in context.viewModel)) {
39496
+ return ["content", ...segments];
39497
+ }
39470
39498
  return void 0;
39471
39499
  }
39472
39500
  function readFromSource(source, segments) {
@@ -40115,7 +40143,7 @@ function makeDefaultBlockComponent(args) {
40115
40143
  pathBase,
40116
40144
  blockId,
40117
40145
  blockKind,
40118
- blockContent: content,
40146
+ blockContent: mergedContent,
40119
40147
  blockBindings,
40120
40148
  editableRouteMetadataFieldIds,
40121
40149
  fragmentRegistry: fragmentRegistry2
@@ -41110,6 +41138,19 @@ function getNavLinkPreset(presetId) {
41110
41138
  }
41111
41139
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
41112
41140
 
41141
+ // ../theme-core/src/header/navDropdownSizing.ts
41142
+ var NAV_DROPDOWN_MIN_WIDTH_REM = 12;
41143
+ var NAV_DROPDOWN_MAX_WIDTH_REM = 22;
41144
+ var NAV_DROPDOWN_VIEWPORT_GUTTER_REM = 1;
41145
+ var NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
41146
+ var NAV_DROPDOWN_MAX_WIDTH_CSS = `min(${NAV_DROPDOWN_MAX_WIDTH_REM}rem, calc(100vw - ${NAV_DROPDOWN_VIEWPORT_GUTTER_REM * 2}rem))`;
41147
+ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
41148
+ `min-width: ${NAV_DROPDOWN_MIN_WIDTH_REM}rem;`,
41149
+ `width: max-content;`,
41150
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
41151
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
41152
+ ];
41153
+
41113
41154
  // ../theme-core/src/header/generateHeaderCss.ts
41114
41155
  var HEADER_BLUR = "blur(12px)";
41115
41156
  var FLOATING_BLUR = "blur(16px)";
@@ -41384,6 +41425,7 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
41384
41425
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
41385
41426
  const rules = [];
41386
41427
  const dropdownStyle = header.dropdownStyle;
41428
+ rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
41387
41429
  const bgToken = dropdownStyle?.background ?? "surface";
41388
41430
  rules.push(`background-color: ${tokens.getColor(bgToken)};`);
41389
41431
  const textToken = dropdownStyle?.textColor ?? "text";
@@ -52658,6 +52700,17 @@ var containerResponsiveThemeCss = `/*
52658
52700
  * =============================================================================
52659
52701
  */
52660
52702
 
52703
+ :where(.theme-scope) .nav-dropdown-menu {
52704
+ /*
52705
+ * Keep these rails in sync with header/navDropdownSizing.ts.
52706
+ * The JS placement gutter is 16px, matching the 1rem per-side gutter in calc(100vw - 2rem).
52707
+ */
52708
+ min-width: 12rem;
52709
+ width: max-content;
52710
+ max-width: min(22rem, calc(100vw - 2rem));
52711
+ transform: translateX(var(--nav-dropdown-shift-x, 0px));
52712
+ }
52713
+
52661
52714
  :where(.theme-scope) .nav-dropdown:hover > .nav-dropdown-menu,
52662
52715
  :where(.theme-scope) .nav-dropdown:focus-within > .nav-dropdown-menu,
52663
52716
  :where(.theme-scope) .nav-dropdown .nav-dropdown-trigger[aria-expanded="true"] + .nav-dropdown-menu {
@@ -58191,7 +58244,7 @@ var SimpleCache = class {
58191
58244
  };
58192
58245
 
58193
58246
  // src/version.ts
58194
- var SDK_VERSION = "0.72.0";
58247
+ var SDK_VERSION = "0.74.0";
58195
58248
 
58196
58249
  // src/client/error.ts
58197
58250
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -6291,7 +6291,9 @@ function backgroundLayer(path2, options = {}) {
6291
6291
  imageClassName,
6292
6292
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
6293
6293
  fallbackToken,
6294
- omitImageLayer = false
6294
+ omitImageLayer = false,
6295
+ imageLoading,
6296
+ imageFetchPriority
6295
6297
  } = options;
6296
6298
  const styleLayer = el("div", {
6297
6299
  className: styleClassName,
@@ -6307,11 +6309,14 @@ function backgroundLayer(path2, options = {}) {
6307
6309
  }
6308
6310
  }
6309
6311
  });
6310
- const imageLayer = createBackgroundImageNode(path2, imageClassName);
6312
+ const imageLayer = createBackgroundImageNode(path2, imageClassName, {
6313
+ loading: imageLoading,
6314
+ fetchPriority: imageFetchPriority
6315
+ });
6311
6316
  const overlayLayer = createBackgroundOverlayNode(path2, overlayClassName);
6312
6317
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
6313
6318
  }
6314
- function createBackgroundImageNode(path2, baseClassName = "rb-absolute rb-z-neg-10") {
6319
+ function createBackgroundImageNode(path2, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
6315
6320
  const imagePath = `${path2}.image`;
6316
6321
  return media(
6317
6322
  {
@@ -6332,7 +6337,9 @@ function createBackgroundImageNode(path2, baseClassName = "rb-absolute rb-z-neg-
6332
6337
  transforms: [{ id: "background.resolveImageStyle" }]
6333
6338
  }
6334
6339
  },
6335
- videoPlayback: "background"
6340
+ videoPlayback: "background",
6341
+ ...options.loading ? { loading: options.loading } : {},
6342
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
6336
6343
  },
6337
6344
  when(imagePath),
6338
6345
  bind(imagePath)
@@ -6474,12 +6481,16 @@ function styledSection(config) {
6474
6481
  bindFrom = "_sectionStyles",
6475
6482
  imageClassName = "rb-absolute rb-z-neg-10",
6476
6483
  renderBackgroundImage = true,
6484
+ backgroundImageLoading,
6485
+ backgroundImageFetchPriority,
6477
6486
  fullWidthPath
6478
6487
  } = config;
6479
6488
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
6480
6489
  imageClassName,
6481
6490
  fallbackToken: background,
6482
- omitImageLayer: !renderBackgroundImage
6491
+ omitImageLayer: !renderBackgroundImage,
6492
+ imageLoading: backgroundImageLoading,
6493
+ imageFetchPriority: backgroundImageFetchPriority
6483
6494
  });
6484
6495
  const childrenArray = Array.isArray(children) ? children : [children];
6485
6496
  return section(
@@ -6694,7 +6705,7 @@ function navRow(opts) {
6694
6705
  el(
6695
6706
  "div",
6696
6707
  {
6697
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
6708
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
6698
6709
  id: dropdownMenuId
6699
6710
  },
6700
6711
  [dropdownLinks]
@@ -9701,6 +9712,10 @@ var heroCopyAndCta = composeFragments([
9701
9712
  { fragment: heroCopyFragment },
9702
9713
  { fragment: heroCtaRowFragment }
9703
9714
  ]);
9715
+ var heroPriorityMediaProps = {
9716
+ loading: "eager",
9717
+ fetchPriority: "high"
9718
+ };
9704
9719
  var heroContentNodes = heroCopyAndCta.layout;
9705
9720
  function heroContentCard(children, gap) {
9706
9721
  return styledContainer({
@@ -9763,7 +9778,8 @@ function heroSplitImagePane() {
9763
9778
  [
9764
9779
  media(
9765
9780
  {
9766
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
9781
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
9782
+ ...heroPriorityMediaProps
9767
9783
  },
9768
9784
  when("_sectionStyles.background.image"),
9769
9785
  bind("_sectionStyles.background.image")
@@ -9774,13 +9790,17 @@ function heroSplitImagePane() {
9774
9790
  var classicLayout = styledSection({
9775
9791
  children: heroContainerStack(heroContentNodes, "md"),
9776
9792
  // styledContainer (rb-container) already provides horizontal padding
9777
- baseClass: ""
9793
+ baseClass: "",
9794
+ backgroundImageLoading: heroPriorityMediaProps.loading,
9795
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
9778
9796
  });
9779
9797
  var microLayout = styledSection({
9780
9798
  children: heroContainerStack(heroContentNodes, "sm"),
9781
9799
  // styledContainer (rb-container) already provides horizontal padding
9782
9800
  baseClass: "",
9783
- spacing: "compact"
9801
+ spacing: "compact",
9802
+ backgroundImageLoading: heroPriorityMediaProps.loading,
9803
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
9784
9804
  });
9785
9805
  function splitLayoutWith(children) {
9786
9806
  return styledSection({
@@ -4,7 +4,7 @@ import * as path from "path";
4
4
  import * as crypto from "crypto";
5
5
 
6
6
  // src/version.ts
7
- var SDK_VERSION = "0.72.0";
7
+ var SDK_VERSION = "0.74.0";
8
8
 
9
9
  // src/constants.ts
10
10
  var PREBUILD_PAGE_SIZE = 50;
@@ -9935,7 +9935,9 @@ function backgroundLayer(path, options = {}) {
9935
9935
  imageClassName,
9936
9936
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
9937
9937
  fallbackToken,
9938
- omitImageLayer = false
9938
+ omitImageLayer = false,
9939
+ imageLoading,
9940
+ imageFetchPriority
9939
9941
  } = options;
9940
9942
  const styleLayer = el("div", {
9941
9943
  className: styleClassName,
@@ -9951,11 +9953,14 @@ function backgroundLayer(path, options = {}) {
9951
9953
  }
9952
9954
  }
9953
9955
  });
9954
- const imageLayer = createBackgroundImageNode(path, imageClassName);
9956
+ const imageLayer = createBackgroundImageNode(path, imageClassName, {
9957
+ loading: imageLoading,
9958
+ fetchPriority: imageFetchPriority
9959
+ });
9955
9960
  const overlayLayer = createBackgroundOverlayNode(path, overlayClassName);
9956
9961
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
9957
9962
  }
9958
- function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10") {
9963
+ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
9959
9964
  const imagePath = `${path}.image`;
9960
9965
  return media(
9961
9966
  {
@@ -9976,7 +9981,9 @@ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-1
9976
9981
  transforms: [{ id: "background.resolveImageStyle" }]
9977
9982
  }
9978
9983
  },
9979
- videoPlayback: "background"
9984
+ videoPlayback: "background",
9985
+ ...options.loading ? { loading: options.loading } : {},
9986
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
9980
9987
  },
9981
9988
  when(imagePath),
9982
9989
  bind(imagePath)
@@ -10173,12 +10180,16 @@ function styledSection(config) {
10173
10180
  bindFrom = "_sectionStyles",
10174
10181
  imageClassName = "rb-absolute rb-z-neg-10",
10175
10182
  renderBackgroundImage = true,
10183
+ backgroundImageLoading,
10184
+ backgroundImageFetchPriority,
10176
10185
  fullWidthPath
10177
10186
  } = config;
10178
10187
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
10179
10188
  imageClassName,
10180
10189
  fallbackToken: background,
10181
- omitImageLayer: !renderBackgroundImage
10190
+ omitImageLayer: !renderBackgroundImage,
10191
+ imageLoading: backgroundImageLoading,
10192
+ imageFetchPriority: backgroundImageFetchPriority
10182
10193
  });
10183
10194
  const childrenArray = Array.isArray(children) ? children : [children];
10184
10195
  return section(
@@ -10393,7 +10404,7 @@ function navRow(opts) {
10393
10404
  el(
10394
10405
  "div",
10395
10406
  {
10396
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
10407
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
10397
10408
  id: dropdownMenuId
10398
10409
  },
10399
10410
  [dropdownLinks]
@@ -13968,6 +13979,10 @@ var heroCopyAndCta = composeFragments([
13968
13979
  { fragment: heroCopyFragment },
13969
13980
  { fragment: heroCtaRowFragment }
13970
13981
  ]);
13982
+ var heroPriorityMediaProps = {
13983
+ loading: "eager",
13984
+ fetchPriority: "high"
13985
+ };
13971
13986
  var heroContentNodes = heroCopyAndCta.layout;
13972
13987
  function heroContentCard(children, gap) {
13973
13988
  return styledContainer({
@@ -14030,7 +14045,8 @@ function heroSplitImagePane() {
14030
14045
  [
14031
14046
  media(
14032
14047
  {
14033
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
14048
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
14049
+ ...heroPriorityMediaProps
14034
14050
  },
14035
14051
  when("_sectionStyles.background.image"),
14036
14052
  bind("_sectionStyles.background.image")
@@ -14041,13 +14057,17 @@ function heroSplitImagePane() {
14041
14057
  var classicLayout = styledSection({
14042
14058
  children: heroContainerStack(heroContentNodes, "md"),
14043
14059
  // styledContainer (rb-container) already provides horizontal padding
14044
- baseClass: ""
14060
+ baseClass: "",
14061
+ backgroundImageLoading: heroPriorityMediaProps.loading,
14062
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
14045
14063
  });
14046
14064
  var microLayout = styledSection({
14047
14065
  children: heroContainerStack(heroContentNodes, "sm"),
14048
14066
  // styledContainer (rb-container) already provides horizontal padding
14049
14067
  baseClass: "",
14050
- spacing: "compact"
14068
+ spacing: "compact",
14069
+ backgroundImageLoading: heroPriorityMediaProps.loading,
14070
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
14051
14071
  });
14052
14072
  function splitLayoutWith(children) {
14053
14073
  return styledSection({
@@ -21746,6 +21766,8 @@ var MediaNodeServer = ({
21746
21766
  className,
21747
21767
  style,
21748
21768
  videoPlayback = "inline",
21769
+ loading = "lazy",
21770
+ fetchPriority,
21749
21771
  size = ImagePresets.full,
21750
21772
  fieldPath,
21751
21773
  blockKind,
@@ -21782,7 +21804,8 @@ var MediaNodeServer = ({
21782
21804
  alt: value.alt ?? "",
21783
21805
  className,
21784
21806
  style: computedStyle,
21785
- loading: "lazy",
21807
+ loading,
21808
+ fetchPriority,
21786
21809
  decoding: "async"
21787
21810
  }
21788
21811
  );
@@ -29696,6 +29719,7 @@ var VideoEmbedNode = ({
29696
29719
  height: "100%",
29697
29720
  border: "none"
29698
29721
  },
29722
+ loading: "lazy",
29699
29723
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
29700
29724
  referrerPolicy: "no-referrer-when-downgrade",
29701
29725
  allowFullScreen: true
@@ -33118,6 +33142,10 @@ function getAbsoluteSegments(fromPath, context) {
33118
33142
  if (scoped?.basePathSegments && scoped.basePathSegments.length > 0) {
33119
33143
  return [...scoped.basePathSegments, ...rest];
33120
33144
  }
33145
+ const hasContentScope = context.scopes.some((entry) => entry.name === "content");
33146
+ if (hasContentScope && !(first in context.viewModel)) {
33147
+ return ["content", ...segments];
33148
+ }
33121
33149
  return void 0;
33122
33150
  }
33123
33151
  function readFromSource(source, segments) {
@@ -33766,7 +33794,7 @@ function makeDefaultBlockComponent(args) {
33766
33794
  pathBase,
33767
33795
  blockId,
33768
33796
  blockKind,
33769
- blockContent: content,
33797
+ blockContent: mergedContent,
33770
33798
  blockBindings,
33771
33799
  editableRouteMetadataFieldIds,
33772
33800
  fragmentRegistry: fragmentRegistry2
@@ -34802,6 +34830,19 @@ function getNavLinkPreset(presetId) {
34802
34830
  }
34803
34831
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
34804
34832
 
34833
+ // ../theme-core/src/header/navDropdownSizing.ts
34834
+ var NAV_DROPDOWN_MIN_WIDTH_REM = 12;
34835
+ var NAV_DROPDOWN_MAX_WIDTH_REM = 22;
34836
+ var NAV_DROPDOWN_VIEWPORT_GUTTER_REM = 1;
34837
+ var NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
34838
+ var NAV_DROPDOWN_MAX_WIDTH_CSS = `min(${NAV_DROPDOWN_MAX_WIDTH_REM}rem, calc(100vw - ${NAV_DROPDOWN_VIEWPORT_GUTTER_REM * 2}rem))`;
34839
+ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
34840
+ `min-width: ${NAV_DROPDOWN_MIN_WIDTH_REM}rem;`,
34841
+ `width: max-content;`,
34842
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
34843
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
34844
+ ];
34845
+
34805
34846
  // ../theme-core/src/header/generateHeaderCss.ts
34806
34847
  var HEADER_BLUR = "blur(12px)";
34807
34848
  var FLOATING_BLUR = "blur(16px)";
@@ -35076,6 +35117,7 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
35076
35117
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
35077
35118
  const rules = [];
35078
35119
  const dropdownStyle = header.dropdownStyle;
35120
+ rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
35079
35121
  const bgToken = dropdownStyle?.background ?? "surface";
35080
35122
  rules.push(`background-color: ${tokens.getColor(bgToken)};`);
35081
35123
  const textToken = dropdownStyle?.textColor ?? "text";
@@ -45143,6 +45185,17 @@ var containerResponsiveThemeCss = `/*
45143
45185
  * =============================================================================
45144
45186
  */
45145
45187
 
45188
+ :where(.theme-scope) .nav-dropdown-menu {
45189
+ /*
45190
+ * Keep these rails in sync with header/navDropdownSizing.ts.
45191
+ * The JS placement gutter is 16px, matching the 1rem per-side gutter in calc(100vw - 2rem).
45192
+ */
45193
+ min-width: 12rem;
45194
+ width: max-content;
45195
+ max-width: min(22rem, calc(100vw - 2rem));
45196
+ transform: translateX(var(--nav-dropdown-shift-x, 0px));
45197
+ }
45198
+
45146
45199
  :where(.theme-scope) .nav-dropdown:hover > .nav-dropdown-menu,
45147
45200
  :where(.theme-scope) .nav-dropdown:focus-within > .nav-dropdown-menu,
45148
45201
  :where(.theme-scope) .nav-dropdown .nav-dropdown-trigger[aria-expanded="true"] + .nav-dropdown-menu {