@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
@@ -0,0 +1,29 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, CourseRegistrationIslandClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("course-registration");
8
+ var enhance = (root, props) => {
9
+ const { siteId, apiBaseUrl, stage, portalToken } = props;
10
+ if (!siteId) {
11
+ throw new Error("[sdk:islands] course-registration requires siteId");
12
+ }
13
+ if (!apiBaseUrl) {
14
+ throw new Error("[sdk:islands] course-registration requires apiBaseUrl");
15
+ }
16
+ const apiConfig = {
17
+ baseUrl: apiBaseUrl,
18
+ auth: portalToken ? { type: "bearer", token: portalToken } : { type: "none" },
19
+ siteId,
20
+ isPreview: stage === "preview"
21
+ };
22
+ return mountReactIsland(root, ({ root: reactRoot }) => {
23
+ reactRoot.render(
24
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(CourseRegistrationIslandClient, { ...props }) })
25
+ );
26
+ });
27
+ };
28
+
29
+ export { decode, enhance };
@@ -0,0 +1,29 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, EventCalendarClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("event-calendar");
8
+ var enhance = (root, props) => {
9
+ const { siteId, apiBaseUrl, stage } = props;
10
+ if (!siteId) {
11
+ throw new Error("[sdk:islands] event-calendar requires siteId");
12
+ }
13
+ if (!apiBaseUrl) {
14
+ throw new Error("[sdk:islands] event-calendar requires apiBaseUrl");
15
+ }
16
+ const apiConfig = {
17
+ baseUrl: apiBaseUrl,
18
+ auth: { type: "none" },
19
+ siteId,
20
+ isPreview: stage === "preview"
21
+ };
22
+ return mountReactIsland(root, ({ root: reactRoot }) => {
23
+ reactRoot.render(
24
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(EventCalendarClient, { ...props }) })
25
+ );
26
+ });
27
+ };
28
+
29
+ export { decode, enhance };
@@ -0,0 +1,26 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, EventCombinedIslandClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("event-combined");
8
+ var enhance = (root, props) => {
9
+ const { siteId, apiBaseUrl, stage } = props;
10
+ if (!apiBaseUrl) {
11
+ throw new Error("[sdk:islands] event-combined requires apiBaseUrl");
12
+ }
13
+ const apiConfig = {
14
+ baseUrl: apiBaseUrl,
15
+ auth: { type: "none" },
16
+ siteId,
17
+ isPreview: stage === "preview"
18
+ };
19
+ return mountReactIsland(root, ({ root: reactRoot }) => {
20
+ reactRoot.render(
21
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(EventCombinedIslandClient, { ...props }) })
22
+ );
23
+ });
24
+ };
25
+
26
+ export { decode, enhance };
@@ -0,0 +1,14 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { EventDetailsIslandClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("event-details");
8
+ var enhance = (root, props) => {
9
+ return mountReactIsland(root, ({ root: reactRoot }) => {
10
+ reactRoot.render(/* @__PURE__ */ jsx(EventDetailsIslandClient, { ...props }));
11
+ });
12
+ };
13
+
14
+ export { decode, enhance };
@@ -0,0 +1,29 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, EventListingClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("event-listing");
8
+ var enhance = (root, props) => {
9
+ const { siteId, apiBaseUrl, stage } = props;
10
+ if (!siteId) {
11
+ throw new Error("[sdk:islands] event-listing requires siteId");
12
+ }
13
+ if (!apiBaseUrl) {
14
+ throw new Error("[sdk:islands] event-listing requires apiBaseUrl");
15
+ }
16
+ const apiConfig = {
17
+ baseUrl: apiBaseUrl,
18
+ auth: { type: "none" },
19
+ siteId,
20
+ isPreview: stage === "preview"
21
+ };
22
+ return mountReactIsland(root, ({ root: reactRoot }) => {
23
+ reactRoot.render(
24
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(EventListingClient, { ...props }) })
25
+ );
26
+ });
27
+ };
28
+
29
+ export { decode, enhance };
@@ -0,0 +1,29 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, EventRegistrationIslandClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("event-registration");
8
+ var enhance = (root, props) => {
9
+ const { siteId, apiBaseUrl, stage, portalToken } = props;
10
+ if (!siteId) {
11
+ throw new Error("[sdk:islands] event-registration requires siteId");
12
+ }
13
+ if (!apiBaseUrl) {
14
+ throw new Error("[sdk:islands] event-registration requires apiBaseUrl");
15
+ }
16
+ const apiConfig = {
17
+ baseUrl: apiBaseUrl,
18
+ auth: portalToken ? { type: "bearer", token: portalToken } : { type: "none" },
19
+ siteId,
20
+ isPreview: stage === "preview"
21
+ };
22
+ return mountReactIsland(root, ({ root: reactRoot }) => {
23
+ reactRoot.render(
24
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(EventRegistrationIslandClient, { ...props }) })
25
+ );
26
+ });
27
+ };
28
+
29
+ export { decode, enhance };
@@ -0,0 +1,85 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, FormNodeClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("form");
8
+ function snapshotFormValues(form) {
9
+ if (!form) return [];
10
+ const snapshots = [];
11
+ const elements = Array.from(form.elements);
12
+ for (const el of elements) {
13
+ if (!(el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement || el instanceof HTMLSelectElement)) {
14
+ continue;
15
+ }
16
+ const name = el.name;
17
+ if (!name) continue;
18
+ if (el instanceof HTMLSelectElement && el.multiple) {
19
+ const selected = Array.from(el.selectedOptions).map((o) => o.value);
20
+ snapshots.push({ kind: "select-multiple", name, values: selected });
21
+ continue;
22
+ }
23
+ if (el instanceof HTMLInputElement && (el.type === "checkbox" || el.type === "radio")) {
24
+ snapshots.push({ kind: "checked", name, value: el.value, checked: el.checked });
25
+ continue;
26
+ }
27
+ snapshots.push({ kind: "value", name, value: el.value });
28
+ }
29
+ return snapshots;
30
+ }
31
+ function applySnapshots(form, snapshots) {
32
+ if (!form) return;
33
+ for (const snapshot of snapshots) {
34
+ if (snapshot.kind === "select-multiple") {
35
+ const el2 = form.elements.namedItem(snapshot.name);
36
+ if (!(el2 instanceof HTMLSelectElement) || !el2.multiple) continue;
37
+ const selected = new Set(snapshot.values);
38
+ Array.from(el2.options).forEach((opt) => {
39
+ opt.selected = selected.has(opt.value);
40
+ });
41
+ continue;
42
+ }
43
+ const el = form.elements.namedItem(snapshot.name);
44
+ if (snapshot.kind === "checked") {
45
+ if (el instanceof RadioNodeList) {
46
+ const inputs = Array.from(el).filter((i) => i instanceof HTMLInputElement);
47
+ const match = inputs.find((i) => i.value === snapshot.value);
48
+ if (match) match.checked = snapshot.checked;
49
+ } else if (el instanceof HTMLInputElement) {
50
+ if (el.type === "checkbox") el.checked = snapshot.checked;
51
+ }
52
+ continue;
53
+ }
54
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement || el instanceof HTMLSelectElement) {
55
+ el.value = snapshot.value;
56
+ }
57
+ }
58
+ }
59
+ var enhance = (root, props) => {
60
+ const { siteId, apiBaseUrl } = props;
61
+ if (!siteId) {
62
+ throw new Error("[sdk:islands] form requires siteId");
63
+ }
64
+ if (!apiBaseUrl) {
65
+ throw new Error("[sdk:islands] form requires apiBaseUrl");
66
+ }
67
+ const apiConfig = {
68
+ baseUrl: apiBaseUrl,
69
+ auth: { type: "none" },
70
+ siteId
71
+ };
72
+ const existingForm = root.querySelector("form");
73
+ const snapshots = snapshotFormValues(existingForm);
74
+ return mountReactIsland(root, ({ root: reactRoot }) => {
75
+ reactRoot.render(
76
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(FormNodeClient, { ...props }) })
77
+ );
78
+ requestAnimationFrame(() => {
79
+ const nextForm = root.querySelector("form");
80
+ applySnapshots(nextForm, snapshots);
81
+ });
82
+ });
83
+ };
84
+
85
+ export { decode, enhance };
@@ -0,0 +1,12 @@
1
+ import { enhanceHeaderSection } from './chunk-5IYGMTUE.mjs';
2
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
3
+ import './chunk-PMAIXMAB.mjs';
4
+
5
+ // src/rendering/islands/enhancers/headerSection.ts
6
+ var decode = defineIslandPropsDecoder("headerSection");
7
+ var enhance = (root, props) => {
8
+ const scrollEnabled = typeof props?.scrollEnabled === "boolean" ? props.scrollEnabled : typeof props?.enabled === "boolean" ? props.enabled : void 0;
9
+ return enhanceHeaderSection(root, { scrollEnabled });
10
+ };
11
+
12
+ export { decode, enhance };
@@ -12762,7 +12762,9 @@ function backgroundLayer(path, options = {}) {
12762
12762
  imageClassName,
12763
12763
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
12764
12764
  fallbackToken,
12765
- omitImageLayer = false
12765
+ omitImageLayer = false,
12766
+ imageLoading,
12767
+ imageFetchPriority
12766
12768
  } = options;
12767
12769
  const styleLayer = el("div", {
12768
12770
  className: styleClassName,
@@ -12778,11 +12780,14 @@ function backgroundLayer(path, options = {}) {
12778
12780
  }
12779
12781
  }
12780
12782
  });
12781
- const imageLayer = createBackgroundImageNode(path, imageClassName);
12783
+ const imageLayer = createBackgroundImageNode(path, imageClassName, {
12784
+ loading: imageLoading,
12785
+ fetchPriority: imageFetchPriority
12786
+ });
12782
12787
  const overlayLayer = createBackgroundOverlayNode(path, overlayClassName);
12783
12788
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
12784
12789
  }
12785
- function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10") {
12790
+ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
12786
12791
  const imagePath = `${path}.image`;
12787
12792
  return media(
12788
12793
  {
@@ -12803,7 +12808,9 @@ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-1
12803
12808
  transforms: [{ id: "background.resolveImageStyle" }]
12804
12809
  }
12805
12810
  },
12806
- videoPlayback: "background"
12811
+ videoPlayback: "background",
12812
+ ...options.loading ? { loading: options.loading } : {},
12813
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
12807
12814
  },
12808
12815
  when(imagePath),
12809
12816
  bind(imagePath)
@@ -13000,12 +13007,16 @@ function styledSection(config) {
13000
13007
  bindFrom = "_sectionStyles",
13001
13008
  imageClassName = "rb-absolute rb-z-neg-10",
13002
13009
  renderBackgroundImage = true,
13010
+ backgroundImageLoading,
13011
+ backgroundImageFetchPriority,
13003
13012
  fullWidthPath
13004
13013
  } = config;
13005
13014
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
13006
13015
  imageClassName,
13007
13016
  fallbackToken: background,
13008
- omitImageLayer: !renderBackgroundImage
13017
+ omitImageLayer: !renderBackgroundImage,
13018
+ imageLoading: backgroundImageLoading,
13019
+ imageFetchPriority: backgroundImageFetchPriority
13009
13020
  });
13010
13021
  const childrenArray = Array.isArray(children) ? children : [children];
13011
13022
  return section(
@@ -13220,7 +13231,7 @@ function navRow(opts) {
13220
13231
  el(
13221
13232
  "div",
13222
13233
  {
13223
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
13234
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
13224
13235
  id: dropdownMenuId
13225
13236
  },
13226
13237
  [dropdownLinks]
@@ -16703,6 +16714,10 @@ var heroCopyAndCta = composeFragments([
16703
16714
  { fragment: heroCopyFragment },
16704
16715
  { fragment: heroCtaRowFragment }
16705
16716
  ]);
16717
+ var heroPriorityMediaProps = {
16718
+ loading: "eager",
16719
+ fetchPriority: "high"
16720
+ };
16706
16721
  var heroContentNodes = heroCopyAndCta.layout;
16707
16722
  function heroContentCard(children, gap) {
16708
16723
  return styledContainer({
@@ -16765,7 +16780,8 @@ function heroSplitImagePane() {
16765
16780
  [
16766
16781
  media(
16767
16782
  {
16768
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
16783
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
16784
+ ...heroPriorityMediaProps
16769
16785
  },
16770
16786
  when("_sectionStyles.background.image"),
16771
16787
  bind("_sectionStyles.background.image")
@@ -16776,13 +16792,17 @@ function heroSplitImagePane() {
16776
16792
  var classicLayout = styledSection({
16777
16793
  children: heroContainerStack(heroContentNodes, "md"),
16778
16794
  // styledContainer (rb-container) already provides horizontal padding
16779
- baseClass: ""
16795
+ baseClass: "",
16796
+ backgroundImageLoading: heroPriorityMediaProps.loading,
16797
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
16780
16798
  });
16781
16799
  var microLayout = styledSection({
16782
16800
  children: heroContainerStack(heroContentNodes, "sm"),
16783
16801
  // styledContainer (rb-container) already provides horizontal padding
16784
16802
  baseClass: "",
16785
- spacing: "compact"
16803
+ spacing: "compact",
16804
+ backgroundImageLoading: heroPriorityMediaProps.loading,
16805
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
16786
16806
  });
16787
16807
  function splitLayoutWith(children) {
16788
16808
  return styledSection({
@@ -28906,6 +28926,19 @@ var NAV_LINK_PRESETS = {
28906
28926
  };
28907
28927
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
28908
28928
 
28929
+ // ../theme-core/src/header/navDropdownSizing.ts
28930
+ var NAV_DROPDOWN_MIN_WIDTH_REM = 12;
28931
+ var NAV_DROPDOWN_MAX_WIDTH_REM = 22;
28932
+ var NAV_DROPDOWN_VIEWPORT_GUTTER_REM = 1;
28933
+ var NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
28934
+ var NAV_DROPDOWN_MAX_WIDTH_CSS = `min(${NAV_DROPDOWN_MAX_WIDTH_REM}rem, calc(100vw - ${NAV_DROPDOWN_VIEWPORT_GUTTER_REM * 2}rem))`;
28935
+ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
28936
+ `min-width: ${NAV_DROPDOWN_MIN_WIDTH_REM}rem;`,
28937
+ `width: max-content;`,
28938
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
28939
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
28940
+ ];
28941
+
28909
28942
  // ../theme-core/src/layout/generateLayoutCss.ts
28910
28943
  var waveTransitionMask = svgDataUrl(
28911
28944
  "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
@@ -0,0 +1,14 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { LocationMapIslandClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("location-map");
8
+ var enhance = (root, props) => {
9
+ return mountReactIsland(root, ({ root: reactRoot }) => {
10
+ reactRoot.render(/* @__PURE__ */ jsx(LocationMapIslandClient, { ...props }));
11
+ });
12
+ };
13
+
14
+ export { decode, enhance };
@@ -0,0 +1,60 @@
1
+ import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
2
+ import { BlockApiProvider, NewsletterFormClient } from './chunk-5IYGMTUE.mjs';
3
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
4
+ import './chunk-PMAIXMAB.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var decode = defineIslandPropsDecoder("newsletter-form");
8
+ function snapshotFormValues(form) {
9
+ if (!form) return [];
10
+ const snapshots = [];
11
+ const elements = Array.from(form.elements);
12
+ for (const el of elements) {
13
+ if (!(el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement)) {
14
+ continue;
15
+ }
16
+ const name = el.name;
17
+ if (!name) continue;
18
+ snapshots.push({ name, value: el.value });
19
+ }
20
+ return snapshots;
21
+ }
22
+ function applySnapshots(form, snapshots) {
23
+ if (!form) return;
24
+ for (const snapshot of snapshots) {
25
+ const el = form.elements.namedItem(snapshot.name);
26
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
27
+ el.value = snapshot.value;
28
+ }
29
+ }
30
+ }
31
+ var enhance = (root, props) => {
32
+ const { siteId, apiBaseUrl, render } = props;
33
+ if (!siteId) {
34
+ throw new Error("[sdk:islands] newsletter-form requires siteId");
35
+ }
36
+ if (!apiBaseUrl) {
37
+ throw new Error("[sdk:islands] newsletter-form requires apiBaseUrl");
38
+ }
39
+ if (!render.hydration.listId) {
40
+ throw new Error("[sdk:islands] newsletter-form requires listId");
41
+ }
42
+ const apiConfig = {
43
+ baseUrl: apiBaseUrl,
44
+ auth: { type: "none" },
45
+ siteId
46
+ };
47
+ const existingForm = root.querySelector("form");
48
+ const snapshots = snapshotFormValues(existingForm);
49
+ return mountReactIsland(root, ({ root: reactRoot }) => {
50
+ reactRoot.render(
51
+ /* @__PURE__ */ jsx(BlockApiProvider, { config: apiConfig, children: /* @__PURE__ */ jsx(NewsletterFormClient, { ...props }) })
52
+ );
53
+ requestAnimationFrame(() => {
54
+ const nextForm = root.querySelector("form");
55
+ applySnapshots(nextForm, snapshots);
56
+ });
57
+ });
58
+ };
59
+
60
+ export { decode, enhance };
@@ -0,0 +1,11 @@
1
+ import { mountShopBlockIsland } from './chunk-RKCFVIMS.mjs';
2
+ import './chunk-N7PBWBWQ.mjs';
3
+ import { ProductDetailClient } from './chunk-5IYGMTUE.mjs';
4
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
5
+ import './chunk-PMAIXMAB.mjs';
6
+
7
+ // src/rendering/islands/enhancers/productDetail.tsx
8
+ var decode = defineIslandPropsDecoder("product-detail");
9
+ var enhance = (root, props) => mountShopBlockIsland(root, props, ProductDetailClient, "product-detail");
10
+
11
+ export { decode, enhance };
@@ -0,0 +1,11 @@
1
+ import { mountShopBlockIsland } from './chunk-RKCFVIMS.mjs';
2
+ import './chunk-N7PBWBWQ.mjs';
3
+ import { ProductListClient } from './chunk-5IYGMTUE.mjs';
4
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
5
+ import './chunk-PMAIXMAB.mjs';
6
+
7
+ // src/rendering/islands/enhancers/productList.tsx
8
+ var decode = defineIslandPropsDecoder("product-list");
9
+ var enhance = (root, props) => mountShopBlockIsland(root, props, ProductListClient, "product-list");
10
+
11
+ export { decode, enhance };