@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
@@ -18,13 +18,13 @@ export declare const componentBorderSchema: z.ZodObject<{
18
18
  width: z.ZodDefault<z.ZodEnum<{
19
19
  medium: "medium";
20
20
  none: "none";
21
- thin: "thin";
22
21
  thick: "thick";
22
+ thin: "thin";
23
23
  hairline: "hairline";
24
24
  }>>;
25
25
  style: z.ZodDefault<z.ZodEnum<{
26
- solid: "solid";
27
26
  dashed: "dashed";
27
+ solid: "solid";
28
28
  }>>;
29
29
  colorToken: z.ZodOptional<z.ZodString>;
30
30
  }, z.core.$strip>;
@@ -123,8 +123,8 @@ export declare const blockDesignPlanSchema: z.ZodObject<{
123
123
  kind: z.ZodLiteral<"panel">;
124
124
  treatment: z.ZodEnum<{
125
125
  editorial: "editorial";
126
- raised: "raised";
127
126
  inset: "inset";
127
+ raised: "raised";
128
128
  }>;
129
129
  }, z.core.$strict>, z.ZodObject<{
130
130
  kind: z.ZodLiteral<"flush-panel">;
@@ -133,8 +133,8 @@ export declare const blockDesignPlanSchema: z.ZodObject<{
133
133
  }>;
134
134
  bleed: z.ZodEnum<{
135
135
  both: "both";
136
- start: "start";
137
136
  end: "end";
137
+ start: "start";
138
138
  }>;
139
139
  }, z.core.$strict>], "kind">;
140
140
  itemSurface: z.ZodEnum<{
@@ -142,9 +142,9 @@ export declare const blockDesignPlanSchema: z.ZodObject<{
142
142
  none: "none";
143
143
  default: "default";
144
144
  editorial: "editorial";
145
+ inset: "inset";
145
146
  raised: "raised";
146
147
  outlined: "outlined";
147
- inset: "inset";
148
148
  }>;
149
149
  transitionAfter: z.ZodEnum<{
150
150
  none: "none";
@@ -155,8 +155,8 @@ export declare const blockDesignPlanSchema: z.ZodObject<{
155
155
  }>;
156
156
  emphasis: z.ZodEnum<{
157
157
  medium: "medium";
158
- low: "low";
159
158
  high: "high";
159
+ low: "low";
160
160
  }>;
161
161
  sectionHeight: z.ZodOptional<z.ZodEnum<{
162
162
  default: "default";
@@ -317,8 +317,8 @@ export declare const persistedPageDesignStateV1Schema: z.ZodObject<{
317
317
  kind: z.ZodLiteral<"panel">;
318
318
  treatment: z.ZodEnum<{
319
319
  editorial: "editorial";
320
- raised: "raised";
321
320
  inset: "inset";
321
+ raised: "raised";
322
322
  }>;
323
323
  }, z.core.$strict>, z.ZodObject<{
324
324
  kind: z.ZodLiteral<"flush-panel">;
@@ -327,8 +327,8 @@ export declare const persistedPageDesignStateV1Schema: z.ZodObject<{
327
327
  }>;
328
328
  bleed: z.ZodEnum<{
329
329
  both: "both";
330
- start: "start";
331
330
  end: "end";
331
+ start: "start";
332
332
  }>;
333
333
  }, z.core.$strict>], "kind">;
334
334
  itemSurface: z.ZodEnum<{
@@ -336,9 +336,9 @@ export declare const persistedPageDesignStateV1Schema: z.ZodObject<{
336
336
  none: "none";
337
337
  default: "default";
338
338
  editorial: "editorial";
339
+ inset: "inset";
339
340
  raised: "raised";
340
341
  outlined: "outlined";
341
- inset: "inset";
342
342
  }>;
343
343
  transitionAfter: z.ZodEnum<{
344
344
  none: "none";
@@ -349,8 +349,8 @@ export declare const persistedPageDesignStateV1Schema: z.ZodObject<{
349
349
  }>;
350
350
  emphasis: z.ZodEnum<{
351
351
  medium: "medium";
352
- low: "low";
353
352
  high: "high";
353
+ low: "low";
354
354
  }>;
355
355
  sectionHeight: z.ZodOptional<z.ZodEnum<{
356
356
  default: "default";
@@ -5,8 +5,8 @@ export declare const generatedContentFrameIntentSchema: z.ZodDiscriminatedUnion<
5
5
  }, z.core.$strict>, z.ZodObject<{
6
6
  kind: z.ZodLiteral<"panel">;
7
7
  treatment: z.ZodEnum<{
8
- raised: "raised";
9
8
  inset: "inset";
9
+ raised: "raised";
10
10
  }>;
11
11
  }, z.core.$strict>, z.ZodObject<{
12
12
  kind: z.ZodLiteral<"flush-panel">;
@@ -57,8 +57,8 @@ export declare const generatedBlockDesignIntentSchema: z.ZodObject<{
57
57
  }, z.core.$strict>, z.ZodObject<{
58
58
  kind: z.ZodLiteral<"panel">;
59
59
  treatment: z.ZodEnum<{
60
- raised: "raised";
61
60
  inset: "inset";
61
+ raised: "raised";
62
62
  }>;
63
63
  }, z.core.$strict>, z.ZodObject<{
64
64
  kind: z.ZodLiteral<"flush-panel">;
@@ -104,8 +104,8 @@ export declare const generatedBlockDesignIntentSchema: z.ZodObject<{
104
104
  kind: z.ZodLiteral<"explicit">;
105
105
  value: z.ZodEnum<{
106
106
  medium: "medium";
107
- low: "low";
108
107
  high: "high";
108
+ low: "low";
109
109
  }>;
110
110
  }, z.core.$strict>], "kind">;
111
111
  }, z.core.$strict>;
@@ -203,8 +203,8 @@ export declare const generatedPageDesignIntentSchema: z.ZodObject<{
203
203
  }, z.core.$strict>, z.ZodObject<{
204
204
  kind: z.ZodLiteral<"panel">;
205
205
  treatment: z.ZodEnum<{
206
- raised: "raised";
207
206
  inset: "inset";
207
+ raised: "raised";
208
208
  }>;
209
209
  }, z.core.$strict>, z.ZodObject<{
210
210
  kind: z.ZodLiteral<"flush-panel">;
@@ -250,8 +250,8 @@ export declare const generatedPageDesignIntentSchema: z.ZodObject<{
250
250
  kind: z.ZodLiteral<"explicit">;
251
251
  value: z.ZodEnum<{
252
252
  medium: "medium";
253
- low: "low";
254
253
  high: "high";
254
+ low: "low";
255
255
  }>;
256
256
  }, z.core.$strict>], "kind">;
257
257
  }, z.core.$strict>;
@@ -11,15 +11,15 @@ export declare const paletteTokenNameSchema: z.ZodEnum<{
11
11
  text: "text";
12
12
  primary: "primary";
13
13
  secondary: "secondary";
14
+ border: "border";
14
15
  background: "background";
16
+ muted: "muted";
15
17
  surface: "surface";
16
- border: "border";
17
18
  accent: "accent";
18
19
  warning: "warning";
19
20
  destructive: "destructive";
20
21
  primaryForeground: "primaryForeground";
21
22
  surfaceAlt: "surfaceAlt";
22
- muted: "muted";
23
23
  }>;
24
24
  export type ThemeColorToken = string & {
25
25
  readonly __brand: 'ThemeColorToken';
@@ -40675,7 +40675,9 @@ function backgroundLayer(path, options = {}) {
40675
40675
  imageClassName,
40676
40676
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
40677
40677
  fallbackToken,
40678
- omitImageLayer = false
40678
+ omitImageLayer = false,
40679
+ imageLoading,
40680
+ imageFetchPriority
40679
40681
  } = options;
40680
40682
  const styleLayer = el("div", {
40681
40683
  className: styleClassName,
@@ -40691,11 +40693,14 @@ function backgroundLayer(path, options = {}) {
40691
40693
  }
40692
40694
  }
40693
40695
  });
40694
- const imageLayer = createBackgroundImageNode(path, imageClassName);
40696
+ const imageLayer = createBackgroundImageNode(path, imageClassName, {
40697
+ loading: imageLoading,
40698
+ fetchPriority: imageFetchPriority
40699
+ });
40695
40700
  const overlayLayer = createBackgroundOverlayNode(path, overlayClassName);
40696
40701
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
40697
40702
  }
40698
- function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10") {
40703
+ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
40699
40704
  const imagePath = `${path}.image`;
40700
40705
  return media(
40701
40706
  {
@@ -40716,7 +40721,9 @@ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-1
40716
40721
  transforms: [{ id: "background.resolveImageStyle" }]
40717
40722
  }
40718
40723
  },
40719
- videoPlayback: "background"
40724
+ videoPlayback: "background",
40725
+ ...options.loading ? { loading: options.loading } : {},
40726
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
40720
40727
  },
40721
40728
  when(imagePath),
40722
40729
  bind(imagePath)
@@ -40913,12 +40920,16 @@ function styledSection(config) {
40913
40920
  bindFrom = "_sectionStyles",
40914
40921
  imageClassName = "rb-absolute rb-z-neg-10",
40915
40922
  renderBackgroundImage = true,
40923
+ backgroundImageLoading,
40924
+ backgroundImageFetchPriority,
40916
40925
  fullWidthPath
40917
40926
  } = config;
40918
40927
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
40919
40928
  imageClassName,
40920
40929
  fallbackToken: background,
40921
- omitImageLayer: !renderBackgroundImage
40930
+ omitImageLayer: !renderBackgroundImage,
40931
+ imageLoading: backgroundImageLoading,
40932
+ imageFetchPriority: backgroundImageFetchPriority
40922
40933
  });
40923
40934
  const childrenArray = Array.isArray(children) ? children : [children];
40924
40935
  return section(
@@ -41129,7 +41140,7 @@ function navRow(opts) {
41129
41140
  el(
41130
41141
  "div",
41131
41142
  {
41132
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
41143
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
41133
41144
  id: dropdownMenuId
41134
41145
  },
41135
41146
  [dropdownLinks]
@@ -44699,6 +44710,10 @@ var heroCopyAndCta = composeFragments([
44699
44710
  { fragment: heroCopyFragment },
44700
44711
  { fragment: heroCtaRowFragment }
44701
44712
  ]);
44713
+ var heroPriorityMediaProps = {
44714
+ loading: "eager",
44715
+ fetchPriority: "high"
44716
+ };
44702
44717
  var heroContentNodes = heroCopyAndCta.layout;
44703
44718
  function heroContentCard(children, gap) {
44704
44719
  return styledContainer({
@@ -44761,7 +44776,8 @@ function heroSplitImagePane() {
44761
44776
  [
44762
44777
  media(
44763
44778
  {
44764
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
44779
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
44780
+ ...heroPriorityMediaProps
44765
44781
  },
44766
44782
  when("_sectionStyles.background.image"),
44767
44783
  bind("_sectionStyles.background.image")
@@ -44772,13 +44788,17 @@ function heroSplitImagePane() {
44772
44788
  var classicLayout = styledSection({
44773
44789
  children: heroContainerStack(heroContentNodes, "md"),
44774
44790
  // styledContainer (rb-container) already provides horizontal padding
44775
- baseClass: ""
44791
+ baseClass: "",
44792
+ backgroundImageLoading: heroPriorityMediaProps.loading,
44793
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
44776
44794
  });
44777
44795
  var microLayout = styledSection({
44778
44796
  children: heroContainerStack(heroContentNodes, "sm"),
44779
44797
  // styledContainer (rb-container) already provides horizontal padding
44780
44798
  baseClass: "",
44781
- spacing: "compact"
44799
+ spacing: "compact",
44800
+ backgroundImageLoading: heroPriorityMediaProps.loading,
44801
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
44782
44802
  });
44783
44803
  function splitLayoutWith(children) {
44784
44804
  return styledSection({
@@ -52285,6 +52305,8 @@ var MediaNodeServer = ({
52285
52305
  className,
52286
52306
  style: style2,
52287
52307
  videoPlayback = "inline",
52308
+ loading = "lazy",
52309
+ fetchPriority,
52288
52310
  size: size4 = ImagePresets.full,
52289
52311
  fieldPath,
52290
52312
  blockKind,
@@ -52321,7 +52343,8 @@ var MediaNodeServer = ({
52321
52343
  alt: value.alt ?? "",
52322
52344
  className,
52323
52345
  style: computedStyle,
52324
- loading: "lazy",
52346
+ loading,
52347
+ fetchPriority,
52325
52348
  decoding: "async"
52326
52349
  }
52327
52350
  );
@@ -59871,6 +59894,7 @@ var VideoEmbedNode = ({
59871
59894
  height: "100%",
59872
59895
  border: "none"
59873
59896
  },
59897
+ loading: "lazy",
59874
59898
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
59875
59899
  referrerPolicy: "no-referrer-when-downgrade",
59876
59900
  allowFullScreen: true
@@ -63575,6 +63599,10 @@ function getAbsoluteSegments(fromPath, context) {
63575
63599
  if (scoped?.basePathSegments && scoped.basePathSegments.length > 0) {
63576
63600
  return [...scoped.basePathSegments, ...rest];
63577
63601
  }
63602
+ const hasContentScope = context.scopes.some((entry) => entry.name === "content");
63603
+ if (hasContentScope && !(first2 in context.viewModel)) {
63604
+ return ["content", ...segments];
63605
+ }
63578
63606
  return void 0;
63579
63607
  }
63580
63608
  function readFromSource(source, segments) {
@@ -64219,7 +64247,7 @@ function makeDefaultBlockComponent(args) {
64219
64247
  pathBase,
64220
64248
  blockId,
64221
64249
  blockKind,
64222
- blockContent: content,
64250
+ blockContent: mergedContent,
64223
64251
  blockBindings,
64224
64252
  editableRouteMetadataFieldIds,
64225
64253
  fragmentRegistry: fragmentRegistry2
@@ -65213,6 +65241,20 @@ function getNavLinkPreset(presetId) {
65213
65241
  return NAV_LINK_PRESETS[presetId];
65214
65242
  }
65215
65243
 
65244
+ // ../theme-core/src/header/navDropdownSizing.ts
65245
+ var NAV_DROPDOWN_MIN_WIDTH_REM = 12;
65246
+ var NAV_DROPDOWN_MAX_WIDTH_REM = 22;
65247
+ var NAV_DROPDOWN_VIEWPORT_GUTTER_REM = 1;
65248
+ var NAV_DROPDOWN_VIEWPORT_GUTTER_PX = 16;
65249
+ var NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
65250
+ var NAV_DROPDOWN_MAX_WIDTH_CSS = `min(${NAV_DROPDOWN_MAX_WIDTH_REM}rem, calc(100vw - ${NAV_DROPDOWN_VIEWPORT_GUTTER_REM * 2}rem))`;
65251
+ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
65252
+ `min-width: ${NAV_DROPDOWN_MIN_WIDTH_REM}rem;`,
65253
+ `width: max-content;`,
65254
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
65255
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
65256
+ ];
65257
+
65216
65258
  // ../theme-core/src/header/generateHeaderCss.ts
65217
65259
  var HEADER_BLUR = "blur(12px)";
65218
65260
  var FLOATING_BLUR = "blur(16px)";
@@ -65487,6 +65529,7 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
65487
65529
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
65488
65530
  const rules = [];
65489
65531
  const dropdownStyle = header.dropdownStyle;
65532
+ rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
65490
65533
  const bgToken = dropdownStyle?.background ?? "surface";
65491
65534
  rules.push(`background-color: ${tokens.getColor(bgToken)};`);
65492
65535
  const textToken = dropdownStyle?.textColor ?? "text";
@@ -76932,6 +76975,17 @@ var containerResponsiveThemeCss = `/*
76932
76975
  * =============================================================================
76933
76976
  */
76934
76977
 
76978
+ :where(.theme-scope) .nav-dropdown-menu {
76979
+ /*
76980
+ * Keep these rails in sync with header/navDropdownSizing.ts.
76981
+ * The JS placement gutter is 16px, matching the 1rem per-side gutter in calc(100vw - 2rem).
76982
+ */
76983
+ min-width: 12rem;
76984
+ width: max-content;
76985
+ max-width: min(22rem, calc(100vw - 2rem));
76986
+ transform: translateX(var(--nav-dropdown-shift-x, 0px));
76987
+ }
76988
+
76935
76989
  :where(.theme-scope) .nav-dropdown:hover > .nav-dropdown-menu,
76936
76990
  :where(.theme-scope) .nav-dropdown:focus-within > .nav-dropdown-menu,
76937
76991
  :where(.theme-scope) .nav-dropdown .nav-dropdown-trigger[aria-expanded="true"] + .nav-dropdown-menu {
@@ -119606,6 +119660,7 @@ function mountHeaderCartRuntime(root, siteId, mounts) {
119606
119660
  // ../blocks/src/system/runtime/header/enhanceHeaderSection.ts
119607
119661
  var SELECTORS = {
119608
119662
  dropdown: ".nav-dropdown",
119663
+ dropdownMenu: ".nav-dropdown-menu",
119609
119664
  dropdownTrigger: ".nav-dropdown-trigger",
119610
119665
  mobileOverlay: "[data-nav-mobile-overlay]",
119611
119666
  mobileToggle: "[data-nav-mobile-toggle]",
@@ -119623,6 +119678,39 @@ var CLASSES = {
119623
119678
  mobileOpen: "nav-mobile-open"
119624
119679
  };
119625
119680
  var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';
119681
+ function planDropdownViewportShift(input) {
119682
+ const { left, right, viewportWidth, gutter } = input;
119683
+ if (!Number.isFinite(left) || !Number.isFinite(right) || !Number.isFinite(viewportWidth) || !Number.isFinite(gutter)) {
119684
+ return { kind: "unchanged" };
119685
+ }
119686
+ const normalizedGutter = Math.max(0, gutter);
119687
+ const viewportLeft = normalizedGutter;
119688
+ const viewportRight = Math.max(viewportLeft, viewportWidth - normalizedGutter);
119689
+ const menuWidth = right - left;
119690
+ const availableWidth = viewportRight - viewportLeft;
119691
+ if (menuWidth >= availableWidth) {
119692
+ const x3 = viewportLeft - left;
119693
+ return x3 === 0 ? { kind: "unchanged" } : { kind: "shift", x: x3 };
119694
+ }
119695
+ let x2 = 0;
119696
+ if (right > viewportRight) x2 = viewportRight - right;
119697
+ if (left + x2 < viewportLeft) x2 += viewportLeft - (left + x2);
119698
+ return x2 === 0 ? { kind: "unchanged" } : { kind: "shift", x: x2 };
119699
+ }
119700
+ function applyDropdownPlacementPlan(menu, plan) {
119701
+ switch (plan.kind) {
119702
+ case "unchanged":
119703
+ menu.style.removeProperty(NAV_DROPDOWN_SHIFT_PROPERTY);
119704
+ return;
119705
+ case "shift":
119706
+ menu.style.setProperty(NAV_DROPDOWN_SHIFT_PROPERTY, `${plan.x}px`);
119707
+ return;
119708
+ default: {
119709
+ const _exhaustive = plan;
119710
+ return _exhaustive;
119711
+ }
119712
+ }
119713
+ }
119626
119714
  function getFirstNonScriptChild(root) {
119627
119715
  const children = Array.from(root.children);
119628
119716
  for (const child of children) {
@@ -119640,16 +119728,58 @@ function enhanceDesktopDropdownAria(root) {
119640
119728
  dropdowns.forEach((dropdown) => {
119641
119729
  const trigger = dropdown.querySelector(SELECTORS.dropdownTrigger);
119642
119730
  if (!trigger) return;
119731
+ const menu = dropdown.querySelector(SELECTORS.dropdownMenu);
119732
+ let placementRafId = null;
119733
+ let placementRafScheduled = false;
119734
+ const cancelPlacementFrame = () => {
119735
+ if (placementRafId !== null) {
119736
+ window.cancelAnimationFrame(placementRafId);
119737
+ placementRafId = null;
119738
+ }
119739
+ placementRafScheduled = false;
119740
+ };
119741
+ const resetPlacement = () => {
119742
+ cancelPlacementFrame();
119743
+ menu?.style.removeProperty(NAV_DROPDOWN_SHIFT_PROPERTY);
119744
+ };
119745
+ const schedulePlacement = () => {
119746
+ if (!menu) return;
119747
+ resetPlacement();
119748
+ placementRafScheduled = true;
119749
+ const id = window.requestAnimationFrame(() => {
119750
+ placementRafScheduled = false;
119751
+ placementRafId = null;
119752
+ const rect = menu.getBoundingClientRect();
119753
+ const plan = planDropdownViewportShift({
119754
+ left: rect.left,
119755
+ right: rect.right,
119756
+ viewportWidth: document.documentElement.clientWidth,
119757
+ gutter: NAV_DROPDOWN_VIEWPORT_GUTTER_PX
119758
+ });
119759
+ applyDropdownPlacementPlan(menu, plan);
119760
+ });
119761
+ placementRafId = placementRafScheduled ? id : null;
119762
+ };
119643
119763
  setExpanded(trigger, false);
119644
- const handleEnter = () => setExpanded(trigger, true);
119764
+ const handleEnter = () => {
119765
+ setExpanded(trigger, true);
119766
+ schedulePlacement();
119767
+ };
119645
119768
  const handleLeave = () => {
119646
119769
  if (dropdown.contains(document.activeElement)) return;
119647
119770
  setExpanded(trigger, false);
119771
+ resetPlacement();
119772
+ };
119773
+ const handleFocusIn = () => {
119774
+ setExpanded(trigger, true);
119775
+ schedulePlacement();
119648
119776
  };
119649
- const handleFocusIn = () => setExpanded(trigger, true);
119650
119777
  const handleFocusOut = (event) => {
119651
119778
  const next = event.relatedTarget;
119652
- if (!next || !dropdown.contains(next)) setExpanded(trigger, false);
119779
+ if (!next || !dropdown.contains(next)) {
119780
+ setExpanded(trigger, false);
119781
+ resetPlacement();
119782
+ }
119653
119783
  };
119654
119784
  dropdown.addEventListener("mouseenter", handleEnter);
119655
119785
  dropdown.addEventListener("mouseleave", handleLeave);
@@ -119660,6 +119790,7 @@ function enhanceDesktopDropdownAria(root) {
119660
119790
  dropdown.removeEventListener("mouseleave", handleLeave);
119661
119791
  dropdown.removeEventListener("focusin", handleFocusIn);
119662
119792
  dropdown.removeEventListener("focusout", handleFocusOut);
119793
+ resetPlacement();
119663
119794
  });
119664
119795
  });
119665
119796
  return cleanups;
@@ -122542,6 +122673,8 @@ var MediaNode = ({
122542
122673
  className,
122543
122674
  style: style2,
122544
122675
  videoPlayback = "inline",
122676
+ loading = "lazy",
122677
+ fetchPriority,
122545
122678
  size: size4 = ImagePresets.full,
122546
122679
  fieldPath,
122547
122680
  blockKind,
@@ -122588,7 +122721,8 @@ var MediaNode = ({
122588
122721
  alt: value.alt ?? "",
122589
122722
  className,
122590
122723
  style: computedStyle,
122591
- loading: "lazy",
122724
+ loading,
122725
+ fetchPriority,
122592
122726
  decoding: "async",
122593
122727
  onError: handleImageError
122594
122728
  }
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { assertNever2, useOptionalEditorUiStoreInstance, getPageDesignEditorState, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, useDebouncedLatestSave, applyPageDesignEditorAction, asEditorBlockId, asEditorBlockValues, resolvePreviewSidebarTab, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetRollbackContentPatch, systemCustomizeFacetApplyContentPatch, createHistoryState, redoHistory, undoHistory, pushHistoryEntry, canRedoHistory, canUndoHistory, planPageDesignLayoutLookCompatibility } from './chunk-3YNCQG5N.mjs';
2
+ import { assertNever2, useOptionalEditorUiStoreInstance, getPageDesignEditorState, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, useDebouncedLatestSave, applyPageDesignEditorAction, asEditorBlockId, asEditorBlockValues, resolvePreviewSidebarTab, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetRollbackContentPatch, systemCustomizeFacetApplyContentPatch, createHistoryState, redoHistory, undoHistory, pushHistoryEntry, canRedoHistory, canUndoHistory, planPageDesignLayoutLookCompatibility } from './chunk-2MIWNFJM.mjs';
3
3
  import { ApiRequestError, resolveSurfaceDocumentAttributes, SURFACE_DOCUMENT_DATA_ATTRIBUTE, SURFACE_IDS } from './chunk-7RX72SK2.mjs';
4
4
  import { createContext, useState, useRef, useEffect, useMemo, useContext } from 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { compileSiteThemeFromSelections, footerLookCatalog, headerLookCatalog, footerLookRejectionReasonLabel, headerLookRejectionReasonLabel, writePlanForLookCustomizationCommand, siteStyleIdFromTheme, getCuratedSiteStyle } from './chunk-3YNCQG5N.mjs';
2
+ import { compileSiteThemeFromSelections, footerLookCatalog, headerLookCatalog, footerLookRejectionReasonLabel, headerLookRejectionReasonLabel, writePlanForLookCustomizationCommand, siteStyleIdFromTheme, getCuratedSiteStyle } from './chunk-2MIWNFJM.mjs';
3
3
  import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { useOptionalPreviewLayout, PreviewQueryProvider } from './chunk-YRJKZEQ3.mjs';
3
- import { PreviewThemeOverlayProvider, resolveSiteStyleAccess, usePreviewThemeOverlay, createOptimisticActionRunner, resolveStyleConfiguratorInitialSnapshot, createStyleConfiguratorState, syncStyleConfiguratorState, buildSiteChromeLookModels, markApplyFailed, markApplySaved, markApplySaving, planSiteChromeLookSelection, previewHeaderLook, previewFooterLook, cycleSiteChromeLookId, resolvePreviewDashboardSetupHandoff, buildPreviewDashboardSetupUrl, resolvePreviewSetupBannerModel, sanitizeDashboardPath } from './chunk-HV745JYE.mjs';
4
- import { resolvePreviewChromeSurface, getPreviewSidebarTab, onPreviewSidebarOpenRequest, getPreviewChromeSurfaceDataProps, PREVIEW_CHROME_THEME_CLASS_NAME, setPreviewSidebarTab, PreviewPageDesignEditorStateProvider, usePreviewPageDesignEditorState, PREVIEW_SURFACE_PARAM } from './chunk-KWQPAJYS.mjs';
5
- import { clientComponentRegistry, deriveLaunchReadiness, DEFAULT_LAUNCH_READINESS_INPUT, planSiteDocument, useEditorUiStore, SiteDocumentLayout, ResizableSplitPane, BlockApiProvider, EditorProvider, getCuratedSiteStyle, compileSiteThemeFromSelections, useEditor, createRoutingHelpers, createSnapshotFromPageRecord, EntryControllerProvider, useEntryEditorController, useEditorUiStoreInstance, surfaceResolutionContextFromTheme, asEditorBlockId, EditableBlockProvider, asDesignBlockId, PageRenderer, ThemeScope, FixedBottomSurface, Button, unwrapResponse, X, ChevronLeft, ChevronRight, RotateCcw, PreviewRichTextEditor, RichText, PreviewTextEditor, Text, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, buildEditorModelRuntimeFieldsByBlockId, applyCompiledRuntimeFieldsToContent, assertNever2, getBlockDefinition, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetCurrentValue, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, assertNever } from './chunk-3YNCQG5N.mjs';
3
+ import { PreviewThemeOverlayProvider, resolveSiteStyleAccess, usePreviewThemeOverlay, createOptimisticActionRunner, resolveStyleConfiguratorInitialSnapshot, createStyleConfiguratorState, syncStyleConfiguratorState, buildSiteChromeLookModels, markApplyFailed, markApplySaved, markApplySaving, planSiteChromeLookSelection, previewHeaderLook, previewFooterLook, cycleSiteChromeLookId, resolvePreviewDashboardSetupHandoff, buildPreviewDashboardSetupUrl, resolvePreviewSetupBannerModel, sanitizeDashboardPath } from './chunk-CEQBBLMJ.mjs';
4
+ import { resolvePreviewChromeSurface, getPreviewSidebarTab, onPreviewSidebarOpenRequest, getPreviewChromeSurfaceDataProps, PREVIEW_CHROME_THEME_CLASS_NAME, setPreviewSidebarTab, PreviewPageDesignEditorStateProvider, usePreviewPageDesignEditorState, PREVIEW_SURFACE_PARAM } from './chunk-CBD47MTM.mjs';
5
+ import { clientComponentRegistry, deriveLaunchReadiness, DEFAULT_LAUNCH_READINESS_INPUT, planSiteDocument, useEditorUiStore, SiteDocumentLayout, ResizableSplitPane, BlockApiProvider, EditorProvider, getCuratedSiteStyle, compileSiteThemeFromSelections, useEditor, createRoutingHelpers, createSnapshotFromPageRecord, EntryControllerProvider, useEntryEditorController, useEditorUiStoreInstance, surfaceResolutionContextFromTheme, asEditorBlockId, EditableBlockProvider, asDesignBlockId, PageRenderer, ThemeScope, FixedBottomSurface, Button, unwrapResponse, X, ChevronLeft, ChevronRight, RotateCcw, PreviewRichTextEditor, RichText, PreviewTextEditor, Text, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, buildEditorModelRuntimeFieldsByBlockId, applyCompiledRuntimeFieldsToContent, assertNever2, getBlockDefinition, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetCurrentValue, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, assertNever } from './chunk-2MIWNFJM.mjs';
6
6
  import { API_ENDPOINTS, createBearerAPIClient, isPreviewRuntimeSessionEditable, DEFAULT_SURFACE_ID, initPreviewAuth, usePreviewAuth, usePreviewAuthFetch, markPreviewAuthExpired, usePreviewToken, parseSurfaceId } from './chunk-7RX72SK2.mjs';
7
7
  import React7, { createContext, useMemo, useState, useEffect, useRef, useCallback, useId, useReducer } from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -2532,11 +2532,11 @@ function SiteChromeCustomizeProvider({
2532
2532
  }
2533
2533
  var previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
2534
2534
  var PreviewEditorSidebar = React7.lazy(async () => {
2535
- const mod = await import('./PreviewEditorSidebar-44T64SAR.mjs');
2535
+ const mod = await import('./PreviewEditorSidebar-5XL7M3OM.mjs');
2536
2536
  return { default: mod.PreviewEditorSidebar };
2537
2537
  });
2538
2538
  var PreviewEditorUI = React7.lazy(async () => {
2539
- const mod = await import('./PreviewEditorUI-4WKHZTXW.mjs');
2539
+ const mod = await import('./PreviewEditorUI-ZDFRDJID.mjs');
2540
2540
  return { default: mod.PreviewEditorUI };
2541
2541
  });
2542
2542
  var previewPaneContainmentStyle = {