@riverbankcms/sdk 0.72.0 → 0.75.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 (146) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-44T64SAR.mjs → PreviewEditorSidebar-U2IHCBYN.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-4WKHZTXW.mjs → PreviewEditorUI-ZGH2RQNP.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-MTUGBTLQ.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +10 -10
  6. package/dist/_dts/api/src/cache-tags.d.ts +22 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  8. package/dist/_dts/api/src/endpoints.d.ts +24 -24
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +2 -1
  10. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +4 -1
  11. package/dist/_dts/blocks/src/client/booking-form.d.ts +2 -0
  12. package/dist/_dts/blocks/src/client/carousel.d.ts +1 -0
  13. package/dist/_dts/blocks/src/client/course-registration.d.ts +2 -0
  14. package/dist/_dts/blocks/src/client/events.d.ts +4 -0
  15. package/dist/_dts/blocks/src/client/form.d.ts +2 -0
  16. package/dist/_dts/blocks/src/client/header.d.ts +1 -0
  17. package/dist/_dts/blocks/src/client/location-map.d.ts +1 -0
  18. package/dist/_dts/blocks/src/client/newsletter-form.d.ts +2 -0
  19. package/dist/_dts/blocks/src/client/shop.d.ts +6 -0
  20. package/dist/_dts/blocks/src/lib/video.d.ts +2 -0
  21. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +21 -1
  22. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +6 -6
  23. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +15 -1
  24. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +11 -0
  25. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +1 -0
  26. package/dist/_dts/blocks/src/system/runtime/header/enhanceHeaderSection.d.ts +13 -0
  27. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -2
  28. package/dist/_dts/blocks/src/system/runtime/nodes/events/index.d.ts +3 -0
  29. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +1 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +1 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +6 -0
  32. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +5 -0
  33. package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +12 -2
  34. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  35. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  36. package/dist/_dts/sdk/src/rendering/islands/deferredVideoEmbeds.d.ts +2 -0
  37. package/dist/_dts/sdk/src/rendering/islands/enhancers/accordion.d.ts +1 -0
  38. package/dist/_dts/sdk/src/rendering/islands/enhancers/bookingForm.d.ts +1 -0
  39. package/dist/_dts/sdk/src/rendering/islands/enhancers/carousel.d.ts +1 -0
  40. package/dist/_dts/sdk/src/rendering/islands/enhancers/cart.d.ts +1 -0
  41. package/dist/_dts/sdk/src/rendering/islands/enhancers/checkout.d.ts +1 -0
  42. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +1 -0
  43. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventCalendar.d.ts +1 -0
  44. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventCombined.d.ts +1 -0
  45. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventDetails.d.ts +1 -0
  46. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventListing.d.ts +1 -0
  47. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventRegistration.d.ts +1 -0
  48. package/dist/_dts/sdk/src/rendering/islands/enhancers/form.d.ts +1 -0
  49. package/dist/_dts/sdk/src/rendering/islands/enhancers/headerSection.d.ts +1 -0
  50. package/dist/_dts/sdk/src/rendering/islands/enhancers/locationMap.d.ts +1 -0
  51. package/dist/_dts/sdk/src/rendering/islands/enhancers/newsletterForm.d.ts +1 -0
  52. package/dist/_dts/sdk/src/rendering/islands/enhancers/productDetail.d.ts +1 -0
  53. package/dist/_dts/sdk/src/rendering/islands/enhancers/productList.d.ts +1 -0
  54. package/dist/_dts/sdk/src/rendering/islands/enhancers/shop.d.ts +1 -0
  55. package/dist/_dts/sdk/src/rendering/islands/hydrateBlocksIslands.d.ts +2 -2
  56. package/dist/_dts/sdk/src/rendering/islands/propsDecoder.d.ts +7 -0
  57. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +9 -0
  58. package/dist/_dts/sdk/src/rendering/server.d.ts +3 -0
  59. package/dist/_dts/sdk/src/version.d.ts +1 -1
  60. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  61. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +7 -7
  62. package/dist/_dts/theme-core/src/buttons/types.d.ts +20 -20
  63. package/dist/_dts/theme-core/src/cards/types.d.ts +2 -2
  64. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  65. package/dist/_dts/theme-core/src/header/navDropdownSizing.d.ts +7 -0
  66. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  67. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  68. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +156 -156
  69. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  70. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +4 -4
  71. package/dist/_dts/theme-core/src/schema.d.ts +178 -178
  72. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +2 -2
  73. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +8 -8
  74. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +5 -5
  75. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  76. package/dist/{chunk-G4NLITC2.mjs → chunk-BGMNDF6T.mjs} +7 -7
  77. package/dist/{chunk-3YNCQG5N.mjs → chunk-GFE74WRD.mjs} +457 -98
  78. package/dist/{chunk-HV745JYE.mjs → chunk-RWXQBRQZ.mjs} +1 -1
  79. package/dist/{chunk-7RX72SK2.mjs → chunk-VX7B5VAC.mjs} +36 -25
  80. package/dist/{chunk-YRJKZEQ3.mjs → chunk-Z7JLNTJR.mjs} +1 -1
  81. package/dist/{chunk-KWQPAJYS.mjs → chunk-ZSHFGFUG.mjs} +2 -2
  82. package/dist/cli/index.mjs +3498 -3826
  83. package/dist/client/accordion-T2UD2ZTH.mjs +120 -0
  84. package/dist/client/altcha-LIGLPZS5.mjs +2755 -0
  85. package/dist/client/bookingForm-GUP75FKN.mjs +3022 -0
  86. package/dist/client/bookings.mjs +32 -10
  87. package/dist/client/carousel-2NQA6V57.mjs +47 -0
  88. package/dist/client/cart-5TFIAFDS.mjs +18 -0
  89. package/dist/client/checkout-TP4WAHZE.mjs +18 -0
  90. package/dist/client/chunk-2PHQZ666.mjs +383 -0
  91. package/dist/client/chunk-3DCJ45Z2.mjs +36 -0
  92. package/dist/client/chunk-3PEDD5KJ.mjs +146 -0
  93. package/dist/client/chunk-CY2ZTSE5.mjs +204 -0
  94. package/dist/client/chunk-F7LHOKEH.mjs +146 -0
  95. package/dist/client/chunk-FU2QRZMX.mjs +7617 -0
  96. package/dist/client/chunk-I2MMZO53.mjs +6 -0
  97. package/dist/client/chunk-II7O4XN3.mjs +2206 -0
  98. package/dist/client/chunk-M3L3KYYR.mjs +1181 -0
  99. package/dist/client/chunk-N7PBWBWQ.mjs +26 -0
  100. package/dist/client/chunk-NWOUL6JY.mjs +1378 -0
  101. package/dist/client/chunk-OJPZEZU2.mjs +31 -0
  102. package/dist/client/chunk-PMAIXMAB.mjs +1960 -0
  103. package/dist/client/chunk-RTZ3JKKX.mjs +178 -0
  104. package/dist/client/chunk-TQ5MSPDX.mjs +74 -0
  105. package/dist/client/chunk-VUAOE3AG.mjs +5592 -0
  106. package/dist/client/chunk-WJXXNDSE.mjs +245 -0
  107. package/dist/client/chunk-YLMKMCSJ.mjs +86 -0
  108. package/dist/client/chunk-ZLMS67RR.mjs +106 -0
  109. package/dist/client/client.mjs +51865 -52071
  110. package/dist/client/courseRegistration-5DPU6PDY.mjs +1737 -0
  111. package/dist/client/eventCalendar-F3GZGTEF.mjs +40 -0
  112. package/dist/client/eventCombined-BQOB6QMY.mjs +37 -0
  113. package/dist/client/eventDetails-PEM2EJWE.mjs +25 -0
  114. package/dist/client/eventListing-YMIQPVME.mjs +40 -0
  115. package/dist/client/eventRegistration-4I6ZNDUF.mjs +40 -0
  116. package/dist/client/form-ZJVAYZ6G.mjs +300 -0
  117. package/dist/client/headerSection-TOT5MGTF.mjs +729 -0
  118. package/dist/client/hooks.mjs +91 -42
  119. package/dist/client/locationMap-J66NZREU.mjs +227 -0
  120. package/dist/client/newsletterForm-ET2XUMRO.mjs +208 -0
  121. package/dist/client/productDetail-C2XIH7C5.mjs +18 -0
  122. package/dist/client/productList-T2AZLFTP.mjs +18 -0
  123. package/dist/client/rendering/client.mjs +12796 -18295
  124. package/dist/client/rendering/islands.mjs +108 -44022
  125. package/dist/client/rendering.mjs +45141 -45346
  126. package/dist/client/shop-UZ6IUZXD.mjs +20 -0
  127. package/dist/preview-next/before-render.mjs +37 -25
  128. package/dist/preview-next/client/runtime.mjs +5 -5
  129. package/dist/preview-next/middleware.mjs +37 -25
  130. package/dist/{sdk-runtime-NGDWSWOS.mjs → sdk-runtime-JCUQM63Y.mjs} +6 -6
  131. package/dist/server/components.mjs +472 -276
  132. package/dist/server/config-validation.mjs +91 -42
  133. package/dist/server/config.mjs +91 -42
  134. package/dist/server/data.mjs +91 -42
  135. package/dist/server/index.mjs +45 -33
  136. package/dist/server/next.mjs +468 -272
  137. package/dist/server/page-converter.mjs +41 -17
  138. package/dist/server/prebuild.mjs +1 -1
  139. package/dist/server/rendering/server.mjs +556 -275
  140. package/dist/server/rendering.mjs +474 -278
  141. package/dist/server/routing.mjs +99 -43
  142. package/dist/server/server.mjs +92 -43
  143. package/dist/server/theme-bridge.mjs +29 -0
  144. package/dist/styles/index.css +16 -0
  145. package/package.json +2 -1
  146. package/dist/SdkPreviewModeRuntime-FO6V7YVY.mjs +0 -8
@@ -1428,6 +1428,9 @@ function validationContext(options = {}) {
1428
1428
  function formatFieldPath(path) {
1429
1429
  return path.map((segment) => String(segment)).join(".");
1430
1430
  }
1431
+ function toZodIssuePath(path) {
1432
+ return [...path];
1433
+ }
1431
1434
  function fieldIssueToMessage(issue2) {
1432
1435
  switch (issue2.kind) {
1433
1436
  case "required":
@@ -1556,6 +1559,9 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
1556
1559
  return assertNever(field);
1557
1560
  }
1558
1561
  }
1562
+ function deriveFieldValidationPlans(fields3, parentPath = []) {
1563
+ return fields3.map((field) => deriveFieldValidationPlan(field, [...parentPath, field.id]));
1564
+ }
1559
1565
  function commonConstraints(required, ...specific) {
1560
1566
  return required ? [{ kind: "required" }, ...specific] : [...specific];
1561
1567
  }
@@ -1571,9 +1577,19 @@ function makePlan(kind, valueKind, field, path, required, constraints) {
1571
1577
  fieldType: field.type,
1572
1578
  path,
1573
1579
  required,
1580
+ visibility: fieldVisibility(field),
1574
1581
  constraints
1575
1582
  };
1576
1583
  }
1584
+ function fieldVisibility(field) {
1585
+ if (field.ui?.hidden) {
1586
+ return { kind: "hidden" };
1587
+ }
1588
+ if (field.visibleRoles && field.visibleRoles.length > 0) {
1589
+ return { kind: "roleRestricted", roles: field.visibleRoles };
1590
+ }
1591
+ return { kind: "visible" };
1592
+ }
1577
1593
  function withRepeaterItemConstraints(field, constraints) {
1578
1594
  const next = [...constraints];
1579
1595
  if (typeof field.minItems === "number") next.push({ kind: "minItems", minimum: field.minItems });
@@ -1587,7 +1603,7 @@ function deriveRepeatedItemVariants(field, parentPath) {
1587
1603
  }));
1588
1604
  }
1589
1605
  function deriveNestedFieldPlans(fields3, parentPath) {
1590
- return fields3.map((field) => deriveFieldValidationPlan(field, [...parentPath, field.id]));
1606
+ return deriveFieldValidationPlans(fields3, parentPath);
1591
1607
  }
1592
1608
  function getRepeaterFields(field) {
1593
1609
  const fields3 = field.polymorphic && field.itemTypes ? Object.values(field.itemTypes).flatMap((itemType) => itemType.fields) : field.schema?.fields ?? [];
@@ -1613,6 +1629,71 @@ function resolveSelectConstraintSource(field) {
1613
1629
  return assertNever(source);
1614
1630
  }
1615
1631
  }
1632
+ function normalizeStoredContentValues(plans, content, options = {}) {
1633
+ if (!content || typeof content !== "object" || Array.isArray(content)) {
1634
+ return {};
1635
+ }
1636
+ const planMap = new Map(plans.map((plan) => [plan.fieldId, plan]));
1637
+ const normalized = {};
1638
+ const ctx = validationContext(options);
1639
+ for (const [key, value] of Object.entries(content)) {
1640
+ const plan = planMap.get(key);
1641
+ normalized[key] = plan ? normalizeStoredFieldValueWithContext(plan, value, ctx) : value;
1642
+ }
1643
+ return normalized;
1644
+ }
1645
+ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
1646
+ if (value === null && !plan.required) {
1647
+ return void 0;
1648
+ }
1649
+ switch (plan.kind) {
1650
+ case "group":
1651
+ return normalizeStoredObjectChildren(plan.children, value, childValidationContext(plan, ctx));
1652
+ case "repeater":
1653
+ return normalizeStoredRepeaterItems(plan, value, ctx);
1654
+ case "string":
1655
+ case "number":
1656
+ case "boolean":
1657
+ case "richText":
1658
+ case "media":
1659
+ case "link":
1660
+ case "select":
1661
+ case "passthrough":
1662
+ return normalizeFieldValue(plan, value, ctx);
1663
+ default:
1664
+ return assertNever(plan);
1665
+ }
1666
+ }
1667
+ function normalizeStoredObjectChildren(children, value, ctx) {
1668
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
1669
+ return value;
1670
+ }
1671
+ const normalized = { ...value };
1672
+ for (const child of children) {
1673
+ normalized[child.fieldId] = normalizeStoredFieldValueWithContext(
1674
+ child,
1675
+ normalized[child.fieldId],
1676
+ ctx
1677
+ );
1678
+ }
1679
+ return normalized;
1680
+ }
1681
+ function normalizeStoredRepeaterItems(plan, value, ctx) {
1682
+ if (!Array.isArray(value)) {
1683
+ return value;
1684
+ }
1685
+ return value.map((item) => {
1686
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
1687
+ return item;
1688
+ }
1689
+ const itemRecord = item;
1690
+ const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemRecord._type)?.fields : plan.repeatedItemPlan;
1691
+ if (!fields3) {
1692
+ return item;
1693
+ }
1694
+ return normalizeStoredObjectChildren(fields3, itemRecord, ctx);
1695
+ });
1696
+ }
1616
1697
  function normalizeFieldValue(plan, value, ctx) {
1617
1698
  switch (plan.kind) {
1618
1699
  case "number":
@@ -1867,16 +1948,19 @@ function fieldPlanToZod(plan, options = {}) {
1867
1948
  const ctx = validationContext(options);
1868
1949
  return z4.any().transform((value) => normalizeFieldValue(plan, value, ctx)).superRefine((value, zodCtx) => {
1869
1950
  for (const validationIssue of validateNormalizedFieldValue(plan, value, ctx)) {
1870
- addFieldIssueToZodContext(zodCtx, validationIssue);
1951
+ addFieldIssueToZodContext(zodCtx, validationIssue, plan.path);
1871
1952
  }
1872
1953
  });
1873
1954
  }
1874
- function addFieldIssueToZodContext(zodCtx, validationIssue) {
1955
+ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
1875
1956
  const message = fieldIssueToMessage(validationIssue);
1957
+ const path = relativeZodIssuePath(validationIssue.path, rootPath);
1958
+ const issuePath = path.length > 0 ? { path: toZodIssuePath(path) } : {};
1876
1959
  switch (validationIssue.kind) {
1877
1960
  case "required":
1878
1961
  if (validationIssue.emptyOrigin) {
1879
1962
  zodCtx.addIssue({
1963
+ ...issuePath,
1880
1964
  code: "too_small",
1881
1965
  origin: validationIssue.emptyOrigin,
1882
1966
  minimum: 1,
@@ -1885,10 +1969,11 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1885
1969
  });
1886
1970
  return;
1887
1971
  }
1888
- zodCtx.addIssue({ code: "invalid_type", expected: "nonoptional", message });
1972
+ zodCtx.addIssue({ ...issuePath, code: "invalid_type", expected: "nonoptional", message });
1889
1973
  return;
1890
1974
  case "tooLong":
1891
1975
  zodCtx.addIssue({
1976
+ ...issuePath,
1892
1977
  code: "too_big",
1893
1978
  origin: "string",
1894
1979
  maximum: validationIssue.maximum,
@@ -1897,7 +1982,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1897
1982
  });
1898
1983
  return;
1899
1984
  case "invalidOption":
1900
- zodCtx.addIssue({ code: "invalid_value", values: [], message });
1985
+ zodCtx.addIssue({ ...issuePath, code: "invalid_value", values: [], message });
1901
1986
  return;
1902
1987
  case "wrongType":
1903
1988
  case "invalidEmail":
@@ -1914,12 +1999,15 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1914
1999
  case "invalidMedia":
1915
2000
  case "invalidLink":
1916
2001
  case "invalidReference":
1917
- zodCtx.addIssue({ code: "custom", message });
2002
+ zodCtx.addIssue({ ...issuePath, code: "custom", message });
1918
2003
  return;
1919
2004
  default:
1920
2005
  assertNever(validationIssue);
1921
2006
  }
1922
2007
  }
2008
+ function relativeZodIssuePath(path, rootPath) {
2009
+ return startsWithFieldPath(path, rootPath) ? path.slice(rootPath.length) : path;
2010
+ }
1923
2011
  function compilePattern(pattern) {
1924
2012
  try {
1925
2013
  return new RegExp(pattern);
@@ -1997,24 +2085,33 @@ function preprocessEmptyValues(content) {
1997
2085
  }
1998
2086
  return result;
1999
2087
  }
2000
- function deriveContentZodFromManifest(manifestOrFields, options = {}) {
2001
- const shape = {};
2002
- const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
2003
- for (const field of fields3) {
2004
- shape[field.id] = buildFieldSchema(field, options);
2005
- }
2006
- return z5.object(shape).catchall(z5.unknown()).passthrough();
2007
- }
2008
2088
  function createManifestValidator(manifestOrFields, options = {}) {
2009
2089
  const isDraft = options.mode === "draft";
2010
- const baseSchema = deriveContentZodFromManifest(manifestOrFields, options);
2090
+ const plans = derivePlansFromManifestOrFields(manifestOrFields);
2091
+ const baseSchema = deriveContentZodFromPlans(plans, options);
2011
2092
  if (isDraft) {
2012
- return z5.preprocess(preprocessEmptyValues, baseSchema);
2093
+ return z5.preprocess(
2094
+ (content) => preprocessEmptyValues(
2095
+ normalizeStoredContentValues(plans, content, options)
2096
+ ),
2097
+ baseSchema
2098
+ );
2099
+ }
2100
+ return z5.preprocess(
2101
+ (content) => normalizeStoredContentValues(plans, content, options),
2102
+ baseSchema
2103
+ );
2104
+ }
2105
+ function deriveContentZodFromPlans(plans, options) {
2106
+ const shape = {};
2107
+ for (const plan of plans) {
2108
+ shape[plan.fieldId] = fieldPlanToZod(plan, options);
2013
2109
  }
2014
- return baseSchema;
2110
+ return z5.object(shape).catchall(z5.unknown()).passthrough();
2015
2111
  }
2016
- function buildFieldSchema(field, options) {
2017
- return fieldPlanToZod(deriveFieldValidationPlan(field), options);
2112
+ function derivePlansFromManifestOrFields(manifestOrFields) {
2113
+ const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
2114
+ return deriveFieldValidationPlans(fields3);
2018
2115
  }
2019
2116
 
2020
2117
  // ../blocks/src/system/manifest/variantKey.ts
@@ -9935,7 +10032,9 @@ function backgroundLayer(path, options = {}) {
9935
10032
  imageClassName,
9936
10033
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
9937
10034
  fallbackToken,
9938
- omitImageLayer = false
10035
+ omitImageLayer = false,
10036
+ imageLoading,
10037
+ imageFetchPriority
9939
10038
  } = options;
9940
10039
  const styleLayer = el("div", {
9941
10040
  className: styleClassName,
@@ -9951,11 +10050,14 @@ function backgroundLayer(path, options = {}) {
9951
10050
  }
9952
10051
  }
9953
10052
  });
9954
- const imageLayer = createBackgroundImageNode(path, imageClassName);
10053
+ const imageLayer = createBackgroundImageNode(path, imageClassName, {
10054
+ loading: imageLoading,
10055
+ fetchPriority: imageFetchPriority
10056
+ });
9955
10057
  const overlayLayer = createBackgroundOverlayNode(path, overlayClassName);
9956
10058
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
9957
10059
  }
9958
- function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10") {
10060
+ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
9959
10061
  const imagePath = `${path}.image`;
9960
10062
  return media(
9961
10063
  {
@@ -9976,7 +10078,9 @@ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-1
9976
10078
  transforms: [{ id: "background.resolveImageStyle" }]
9977
10079
  }
9978
10080
  },
9979
- videoPlayback: "background"
10081
+ videoPlayback: "background",
10082
+ ...options.loading ? { loading: options.loading } : {},
10083
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
9980
10084
  },
9981
10085
  when(imagePath),
9982
10086
  bind(imagePath)
@@ -10173,12 +10277,16 @@ function styledSection(config) {
10173
10277
  bindFrom = "_sectionStyles",
10174
10278
  imageClassName = "rb-absolute rb-z-neg-10",
10175
10279
  renderBackgroundImage = true,
10280
+ backgroundImageLoading,
10281
+ backgroundImageFetchPriority,
10176
10282
  fullWidthPath
10177
10283
  } = config;
10178
10284
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
10179
10285
  imageClassName,
10180
10286
  fallbackToken: background,
10181
- omitImageLayer: !renderBackgroundImage
10287
+ omitImageLayer: !renderBackgroundImage,
10288
+ imageLoading: backgroundImageLoading,
10289
+ imageFetchPriority: backgroundImageFetchPriority
10182
10290
  });
10183
10291
  const childrenArray = Array.isArray(children) ? children : [children];
10184
10292
  return section(
@@ -10393,7 +10501,7 @@ function navRow(opts) {
10393
10501
  el(
10394
10502
  "div",
10395
10503
  {
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",
10504
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
10397
10505
  id: dropdownMenuId
10398
10506
  },
10399
10507
  [dropdownLinks]
@@ -13968,6 +14076,10 @@ var heroCopyAndCta = composeFragments([
13968
14076
  { fragment: heroCopyFragment },
13969
14077
  { fragment: heroCtaRowFragment }
13970
14078
  ]);
14079
+ var heroPriorityMediaProps = {
14080
+ loading: "eager",
14081
+ fetchPriority: "high"
14082
+ };
13971
14083
  var heroContentNodes = heroCopyAndCta.layout;
13972
14084
  function heroContentCard(children, gap) {
13973
14085
  return styledContainer({
@@ -14030,7 +14142,8 @@ function heroSplitImagePane() {
14030
14142
  [
14031
14143
  media(
14032
14144
  {
14033
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
14145
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
14146
+ ...heroPriorityMediaProps
14034
14147
  },
14035
14148
  when("_sectionStyles.background.image"),
14036
14149
  bind("_sectionStyles.background.image")
@@ -14041,13 +14154,17 @@ function heroSplitImagePane() {
14041
14154
  var classicLayout = styledSection({
14042
14155
  children: heroContainerStack(heroContentNodes, "md"),
14043
14156
  // styledContainer (rb-container) already provides horizontal padding
14044
- baseClass: ""
14157
+ baseClass: "",
14158
+ backgroundImageLoading: heroPriorityMediaProps.loading,
14159
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
14045
14160
  });
14046
14161
  var microLayout = styledSection({
14047
14162
  children: heroContainerStack(heroContentNodes, "sm"),
14048
14163
  // styledContainer (rb-container) already provides horizontal padding
14049
14164
  baseClass: "",
14050
- spacing: "compact"
14165
+ spacing: "compact",
14166
+ backgroundImageLoading: heroPriorityMediaProps.loading,
14167
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
14051
14168
  });
14052
14169
  function splitLayoutWith(children) {
14053
14170
  return styledSection({
@@ -18440,7 +18557,7 @@ var cardStylingFields = [
18440
18557
  description: "Text for the event action button",
18441
18558
  required: false,
18442
18559
  multiline: false,
18443
- defaultValue: "View event",
18560
+ defaultValue: "Book now",
18444
18561
  maxLength: 40
18445
18562
  }
18446
18563
  ];
@@ -18952,6 +19069,7 @@ var eventRegistrationBlockDefinition = {
18952
19069
  limit: "50",
18953
19070
  // Get more events for selection
18954
19071
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19072
+ readProfile: "registration",
18955
19073
  // When rendering on an event content entry page, scope the list to that entry so
18956
19074
  // the wizard always includes the current event (and avoids stale cached "all events" responses).
18957
19075
  entryId: { $bind: { from: "$root.contentEntry._entryId", fallback: "" } }
@@ -19900,7 +20018,7 @@ var eventSpotlightLayout = [
19900
20018
  columns: { $bind: { from: "content.columns", fallback: "3" } },
19901
20019
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
19902
20020
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
19903
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
20021
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
19904
20022
  ctaLabel: { $bind: { from: "content.ctaLabel" } },
19905
20023
  ctaUrl: { $bind: { from: "content.ctaUrl", transforms: [{ id: "links.resolve" }] } },
19906
20024
  showVenue: { $bind: { from: "content.showVenue" } },
@@ -19944,7 +20062,8 @@ var eventSpotlightBlockDefinition = {
19944
20062
  siteId: { $bind: { from: "$root.siteId" } },
19945
20063
  limit: { $bind: { from: "content.maxEvents", fallback: "3" } },
19946
20064
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19947
- detailLevel: "listing"
20065
+ detailLevel: "listing",
20066
+ readProfile: "spotlight"
19948
20067
  },
19949
20068
  mode: "server"
19950
20069
  }
@@ -20416,7 +20535,7 @@ var COLUMN_CLASSES = {
20416
20535
  };
20417
20536
  function getContainerClass(layout, columns) {
20418
20537
  if (layout === "compact") {
20419
- return "rb-flex rb-flex-col rb-gap-2";
20538
+ return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
20420
20539
  }
20421
20540
  if (layout === "stack") {
20422
20541
  return "rb-flex rb-flex-col rb-gap-6";
@@ -20547,7 +20666,7 @@ function formatEventPrice(event) {
20547
20666
  }
20548
20667
  function resolveEventCta(event, buttonText) {
20549
20668
  const { isFull: isSoldOut } = getEventAvailability(event);
20550
- const defaultButtonText = event.kind === "course_session" ? "View course" : "View event";
20669
+ const defaultButtonText = event.kind === "course_session" ? "Book course" : "Book now";
20551
20670
  const effectiveButtonText = buttonText ?? defaultButtonText;
20552
20671
  if (isSoldOut) {
20553
20672
  return { label: "Sold out", href: event.path, hidden: true };
@@ -21746,6 +21865,8 @@ var MediaNodeServer = ({
21746
21865
  className,
21747
21866
  style,
21748
21867
  videoPlayback = "inline",
21868
+ loading = "lazy",
21869
+ fetchPriority,
21749
21870
  size = ImagePresets.full,
21750
21871
  fieldPath,
21751
21872
  blockKind,
@@ -21782,7 +21903,8 @@ var MediaNodeServer = ({
21782
21903
  alt: value.alt ?? "",
21783
21904
  className,
21784
21905
  style: computedStyle,
21785
- loading: "lazy",
21906
+ loading,
21907
+ fetchPriority,
21786
21908
  decoding: "async"
21787
21909
  }
21788
21910
  );
@@ -22156,7 +22278,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
22156
22278
  containerClass: getContainerClass(layout, source.columns ?? "3"),
22157
22279
  cardVariant: source.cardVariant ?? "default",
22158
22280
  buttonVariant: source.buttonVariant ?? "primary",
22159
- buttonText: source.buttonText ?? "View event",
22281
+ buttonText: source.buttonText ?? "Book now",
22160
22282
  showVenue: source.showVenue ?? true,
22161
22283
  showMap: source.showMap ?? true,
22162
22284
  showCapacity: source.showCapacity ?? true,
@@ -22403,7 +22525,7 @@ var eventListingLayout = [
22403
22525
  loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
22404
22526
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
22405
22527
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
22406
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
22528
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
22407
22529
  showVenue: { $bind: { from: "content.showVenue" } },
22408
22530
  showMap: { $bind: { from: "content.showMap" } },
22409
22531
  showCapacity: { $bind: { from: "content.showCapacity" } },
@@ -22481,6 +22603,7 @@ var eventListingBlockDefinition = {
22481
22603
  limit: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
22482
22604
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
22483
22605
  detailLevel: "listing",
22606
+ readProfile: { $bind: { from: "content.layout", fallback: "listing-card" } },
22484
22607
  kind: { $bind: { from: "content.kind" } },
22485
22608
  eventSurface: { $bind: { from: "content.eventSurface" } },
22486
22609
  eventPresets: {
@@ -22620,7 +22743,7 @@ function buildEventCalendarDisplay(source) {
22620
22743
  ),
22621
22744
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
22622
22745
  buttonVariant: source.buttonVariant ?? "primary",
22623
- buttonText: source.buttonText ?? "View event",
22746
+ buttonText: source.buttonText ?? "Book now",
22624
22747
  showVenue: source.showVenue ?? true,
22625
22748
  showMap: source.showMap ?? true,
22626
22749
  showCapacity: source.showCapacity ?? true,
@@ -22809,7 +22932,7 @@ var eventCalendarLayout = [
22809
22932
  $bind: { from: "content.buttonVariant", fallback: "primary" }
22810
22933
  },
22811
22934
  buttonText: {
22812
- $bind: { from: "content.buttonText", fallback: "View event" }
22935
+ $bind: { from: "content.buttonText", fallback: "Book now" }
22813
22936
  },
22814
22937
  emptyMessage: { $bind: { from: "content.emptyMessage" } }
22815
22938
  })
@@ -23270,6 +23393,7 @@ var eventCalendarBlockDefinition = {
23270
23393
  limit: 100,
23271
23394
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
23272
23395
  detailLevel: "listing",
23396
+ readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
23273
23397
  // Pass filter params if configured
23274
23398
  kind: { $bind: { from: "content.kind" } },
23275
23399
  eventSurface: { $bind: { from: "content.eventSurface" } },
@@ -29601,9 +29725,9 @@ function getEmbedUrl(info) {
29601
29725
  const kind = info.kind ?? "p";
29602
29726
  return `https://www.instagram.com/${kind}/${info.id}/embed`;
29603
29727
  }
29604
- default:
29605
- return "";
29606
29728
  }
29729
+ const exhaustive = info.provider;
29730
+ return exhaustive;
29607
29731
  }
29608
29732
  function getThumbnailUrl(info) {
29609
29733
  switch (info.provider) {
@@ -29613,9 +29737,20 @@ function getThumbnailUrl(info) {
29613
29737
  return `https://vumbnail.com/${info.id}.jpg`;
29614
29738
  case "instagram":
29615
29739
  return "";
29616
- default:
29617
- return "";
29618
29740
  }
29741
+ const exhaustive = info.provider;
29742
+ return exhaustive;
29743
+ }
29744
+ function getVideoEmbedLoadingStrategy(provider) {
29745
+ switch (provider) {
29746
+ case "youtube":
29747
+ case "vimeo":
29748
+ return "native-lazy";
29749
+ case "instagram":
29750
+ return "defer-until-near-viewport";
29751
+ }
29752
+ const exhaustive = provider;
29753
+ return exhaustive;
29619
29754
  }
29620
29755
  function getVideoEmbed(url) {
29621
29756
  const info = parseVideoUrl(url);
@@ -29630,7 +29765,7 @@ function getVideoEmbed(url) {
29630
29765
  }
29631
29766
 
29632
29767
  // ../blocks/src/system/runtime/nodes/video-embed.tsx
29633
- import { jsx as jsx18 } from "react/jsx-runtime";
29768
+ import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
29634
29769
  var VideoEmbedNode = ({
29635
29770
  value,
29636
29771
  className,
@@ -29673,34 +29808,43 @@ var VideoEmbedNode = ({
29673
29808
  );
29674
29809
  }
29675
29810
  const title = getVideoTitle(embedInfo);
29676
- return /* @__PURE__ */ jsx18("div", { ...rest, children: /* @__PURE__ */ jsx18(
29811
+ const loadingStrategy = getVideoEmbedLoadingStrategy(embedInfo.provider);
29812
+ const shouldDeferSrc = loadingStrategy === "defer-until-near-viewport";
29813
+ return /* @__PURE__ */ jsx18("div", { ...rest, children: /* @__PURE__ */ jsxs7(
29677
29814
  "div",
29678
29815
  {
29679
29816
  className,
29817
+ "data-rb-video-embed-wrapper": shouldDeferSrc ? "true" : void 0,
29680
29818
  style: {
29681
29819
  ...style,
29682
29820
  aspectRatio: resolvedAspectRatio,
29683
29821
  position: "relative",
29684
29822
  width: "100%"
29685
29823
  },
29686
- children: /* @__PURE__ */ jsx18(
29687
- "iframe",
29688
- {
29689
- src: embedInfo.embedUrl,
29690
- title,
29691
- style: {
29692
- position: "absolute",
29693
- top: 0,
29694
- left: 0,
29695
- width: "100%",
29696
- height: "100%",
29697
- border: "none"
29698
- },
29699
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
29700
- referrerPolicy: "no-referrer-when-downgrade",
29701
- allowFullScreen: true
29702
- }
29703
- )
29824
+ children: [
29825
+ /* @__PURE__ */ jsx18(
29826
+ "iframe",
29827
+ {
29828
+ src: shouldDeferSrc ? void 0 : embedInfo.embedUrl,
29829
+ title,
29830
+ loading: "lazy",
29831
+ "data-rb-video-embed-deferred": shouldDeferSrc ? "true" : void 0,
29832
+ "data-rb-video-embed-src": shouldDeferSrc ? embedInfo.embedUrl : void 0,
29833
+ style: {
29834
+ position: "absolute",
29835
+ top: 0,
29836
+ left: 0,
29837
+ width: "100%",
29838
+ height: "100%",
29839
+ border: "none"
29840
+ },
29841
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
29842
+ referrerPolicy: "no-referrer-when-downgrade",
29843
+ allowFullScreen: true
29844
+ }
29845
+ ),
29846
+ shouldDeferSrc ? /* @__PURE__ */ jsx18("noscript", { children: /* @__PURE__ */ jsx18("a", { href: embedInfo.url, children: "View on Instagram" }) }) : null
29847
+ ]
29704
29848
  }
29705
29849
  ) });
29706
29850
  };
@@ -29715,9 +29859,9 @@ function getVideoTitle(info) {
29715
29859
  const label = kind === "reel" ? "reel" : kind === "tv" ? "video" : "post";
29716
29860
  return `Instagram ${label} ${info.id}`;
29717
29861
  }
29718
- default:
29719
- return "Embedded video";
29720
29862
  }
29863
+ const exhaustive = info.provider;
29864
+ return exhaustive;
29721
29865
  }
29722
29866
  function getAspectRatio(propAspectRatio, style) {
29723
29867
  const styleAspectRatio = style?.aspectRatio;
@@ -29799,7 +29943,7 @@ function getCarouselSlidesToShowCssVars(value) {
29799
29943
  }
29800
29944
 
29801
29945
  // ../blocks/src/system/runtime/nodes/carousel.server.tsx
29802
- import { jsx as jsx20, jsxs as jsxs7 } from "react/jsx-runtime";
29946
+ import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
29803
29947
  var CarouselNodeSSR = ({
29804
29948
  blockId,
29805
29949
  children,
@@ -29818,7 +29962,7 @@ var CarouselNodeSSR = ({
29818
29962
  const resolvedSlides = resolveSlidesToShowMobile(normalizedSlidesToShow);
29819
29963
  const controlsEnabled = arrowVisibility === "never" ? false : normalizeBoolean2(showControls);
29820
29964
  const shouldSnap = transition === "slide";
29821
- return /* @__PURE__ */ jsxs7(
29965
+ return /* @__PURE__ */ jsxs8(
29822
29966
  "div",
29823
29967
  {
29824
29968
  className: clsx_default("carousel-root rb-relative", className),
@@ -29882,7 +30026,7 @@ function normalizeBoolean2(value) {
29882
30026
  }
29883
30027
 
29884
30028
  // ../blocks/src/system/runtime/nodes/accordion.server.tsx
29885
- import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
30029
+ import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
29886
30030
  var ACCORDION_ICONS = {
29887
30031
  Plus,
29888
30032
  Minus,
@@ -29899,7 +30043,7 @@ var AccordionNodeSSR = ({
29899
30043
  defaultValue,
29900
30044
  collapsible
29901
30045
  }) => {
29902
- return /* @__PURE__ */ jsxs8(
30046
+ return /* @__PURE__ */ jsxs9(
29903
30047
  "div",
29904
30048
  {
29905
30049
  className: clsx_default("accordion-root", className),
@@ -29929,16 +30073,16 @@ var AccordionItemNodeSSR = ({
29929
30073
  const iconConfig = ICON_CONFIG[resolvedIconStyle];
29930
30074
  const ClosedIconComponent = ACCORDION_ICONS[iconConfig.closedIcon];
29931
30075
  const OpenIconComponent = iconConfig.openIcon ? ACCORDION_ICONS[iconConfig.openIcon] : null;
29932
- return /* @__PURE__ */ jsxs8(
30076
+ return /* @__PURE__ */ jsxs9(
29933
30077
  "div",
29934
30078
  {
29935
30079
  className: clsx_default("accordion-item", className),
29936
30080
  "data-accordion-value": resolvedValue,
29937
30081
  "data-state": "closed",
29938
30082
  children: [
29939
- /* @__PURE__ */ jsxs8("div", { className: "accordion-trigger", role: "button", tabIndex: 0, "aria-expanded": "false", children: [
30083
+ /* @__PURE__ */ jsxs9("div", { className: "accordion-trigger", role: "button", tabIndex: 0, "aria-expanded": "false", children: [
29940
30084
  /* @__PURE__ */ jsx21("span", { className: "accordion-trigger-text", children: resolveNode(triggerSource) }),
29941
- /* @__PURE__ */ jsxs8("span", { className: "accordion-icon", "aria-hidden": "true", children: [
30085
+ /* @__PURE__ */ jsxs9("span", { className: "accordion-icon", "aria-hidden": "true", children: [
29942
30086
  ClosedIconComponent && /* @__PURE__ */ jsx21(ClosedIconComponent, { className: "accordion-icon-closed" }),
29943
30087
  OpenIconComponent && /* @__PURE__ */ jsx21(OpenIconComponent, { className: "accordion-icon-open" })
29944
30088
  ] })
@@ -29967,7 +30111,7 @@ function resolveNode(value) {
29967
30111
  }
29968
30112
 
29969
30113
  // ../blocks/src/system/runtime/nodes/header-section.server.tsx
29970
- import { jsx as jsx22, jsxs as jsxs9 } from "react/jsx-runtime";
30114
+ import { jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
29971
30115
  function hasShrinkClasses(className) {
29972
30116
  return typeof className === "string" && className.includes("rb-header-shrink");
29973
30117
  }
@@ -29975,16 +30119,21 @@ var HeaderSectionNode = ({
29975
30119
  blockId,
29976
30120
  children,
29977
30121
  className,
30122
+ "data-preview-site-chrome-surface": previewSiteChromeSurface,
29978
30123
  ...rest
29979
30124
  }) => {
29980
30125
  const { wrapperClasses, sectionClasses } = splitPositioningClasses(className);
29981
- const wrapperClassName = `block-site-header${wrapperClasses ? ` ${wrapperClasses}` : ""}`;
30126
+ const wrapperClassName = [
30127
+ "block-site-header",
30128
+ wrapperClasses,
30129
+ previewSiteChromeSurface ? "group/site-chrome rb-relative" : ""
30130
+ ].filter(Boolean).join(" ");
29982
30131
  const asProp = rest.as;
29983
30132
  const styleProp = rest.style;
29984
30133
  const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
29985
30134
  const allowOverflowProp = typeof rest.allowOverflow === "boolean" ? rest.allowOverflow : void 0;
29986
30135
  const dataSlotProp = typeof rest["data-slot"] === "string" ? rest["data-slot"] : void 0;
29987
- return /* @__PURE__ */ jsxs9(
30136
+ return /* @__PURE__ */ jsxs10(
29988
30137
  "nav",
29989
30138
  {
29990
30139
  ...getIslandRootProps("headerSection", blockId),
@@ -29994,6 +30143,7 @@ var HeaderSectionNode = ({
29994
30143
  "data-block": "site-header",
29995
30144
  "data-block-kind": "block.site-header",
29996
30145
  "data-block-id": blockId ?? void 0,
30146
+ "data-preview-site-chrome-surface": previewSiteChromeSurface,
29997
30147
  children: [
29998
30148
  /* @__PURE__ */ jsx22(IslandPropsScript, { value: { enabled: hasShrinkClasses(className) } }),
29999
30149
  /* @__PURE__ */ jsx22(
@@ -30015,7 +30165,7 @@ var HeaderSectionNode = ({
30015
30165
  var header_section_server_default = HeaderSectionNode;
30016
30166
 
30017
30167
  // ../blocks/src/system/runtime/nodes/spinner.tsx
30018
- import { jsx as jsx23, jsxs as jsxs10 } from "react/jsx-runtime";
30168
+ import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
30019
30169
  function resolveColorStyle(color) {
30020
30170
  switch (color) {
30021
30171
  case "inherit":
@@ -30042,7 +30192,7 @@ function SpinnerNode({
30042
30192
  const accessibilityProps = srLabel ? { role: "status", "aria-live": "polite" } : hasExplicitAriaLabel ? {} : { "aria-hidden": true };
30043
30193
  const trackStroke = color === "inherit" ? "currentColor" : "var(--rb-spinner-track-color)";
30044
30194
  const trackOpacity = color === "inherit" ? 0.25 : 1;
30045
- return /* @__PURE__ */ jsxs10(
30195
+ return /* @__PURE__ */ jsxs11(
30046
30196
  "span",
30047
30197
  {
30048
30198
  ...accessibilityProps,
@@ -30058,7 +30208,7 @@ function SpinnerNode({
30058
30208
  },
30059
30209
  ...rest,
30060
30210
  children: [
30061
- /* @__PURE__ */ jsxs10("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
30211
+ /* @__PURE__ */ jsxs11("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
30062
30212
  /* @__PURE__ */ jsx23(
30063
30213
  "circle",
30064
30214
  {
@@ -30442,7 +30592,7 @@ function buildBookingFormInteractiveIslandProps(props2) {
30442
30592
  }
30443
30593
 
30444
30594
  // ../blocks/src/system/runtime/nodes/booking-form.server.tsx
30445
- import { Fragment as Fragment2, jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
30595
+ import { Fragment as Fragment2, jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
30446
30596
  function BookingFormSSR({
30447
30597
  blockId,
30448
30598
  siteId,
@@ -30486,14 +30636,14 @@ function BookingFormSSR({
30486
30636
  className
30487
30637
  });
30488
30638
  const display = islandProps.render.display;
30489
- return /* @__PURE__ */ jsxs11(
30639
+ return /* @__PURE__ */ jsxs12(
30490
30640
  "div",
30491
30641
  {
30492
30642
  className: `booking-form-ssr ${className ?? ""}`.trim(),
30493
30643
  ...getIslandRootProps("booking-form", blockId),
30494
30644
  children: [
30495
30645
  /* @__PURE__ */ jsx24(IslandPropsScript, { value: islandProps }),
30496
- /* @__PURE__ */ jsx24("div", { className: "booking-form-ssr__summary", children: display.state === "missing" ? /* @__PURE__ */ jsx24("p", { className: "booking-form-ssr__error", children: display.message }) : /* @__PURE__ */ jsxs11(Fragment2, { children: [
30646
+ /* @__PURE__ */ jsx24("div", { className: "booking-form-ssr__summary", children: display.state === "missing" ? /* @__PURE__ */ jsx24("p", { className: "booking-form-ssr__error", children: display.message }) : /* @__PURE__ */ jsxs12(Fragment2, { children: [
30497
30647
  /* @__PURE__ */ jsx24("strong", { children: display.submitLabel }),
30498
30648
  display.successMessage ? /* @__PURE__ */ jsx24("p", { className: "booking-form-ssr__success", children: display.successMessage }) : null
30499
30649
  ] }) }),
@@ -30603,22 +30753,22 @@ function filterMembershipsForEvent(siteMemberships, event) {
30603
30753
  }
30604
30754
 
30605
30755
  // ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
30606
- import { jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
30756
+ import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
30607
30757
  function CoursePricingDisplay({
30608
30758
  pricing,
30609
30759
  acceptedItems
30610
30760
  }) {
30611
- return /* @__PURE__ */ jsxs12("div", { className: "rb-mt-6", children: [
30761
+ return /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30612
30762
  /* @__PURE__ */ jsx25("div", { className: "rb-label rb-mb-2", children: pricing.selectableOptions.length > 1 ? "Pricing" : "Cost" }),
30613
- pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx25("div", { className: "rb-flex rb-flex-col rb-gap-2", children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs12("div", { children: [
30614
- /* @__PURE__ */ jsxs12("strong", { children: [
30763
+ pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx25("div", { className: "rb-flex rb-flex-col rb-gap-2", children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs13("div", { children: [
30764
+ /* @__PURE__ */ jsxs13("strong", { children: [
30615
30765
  option.name,
30616
30766
  ": ",
30617
30767
  formatCoursePriceAmount(option.priceAmount, pricing.currency)
30618
30768
  ] }),
30619
30769
  option.description ? /* @__PURE__ */ jsx25("p", { className: "rb-caption status-muted", children: option.description }) : null
30620
30770
  ] }, option.id)) }) : /* @__PURE__ */ jsx25("p", { children: /* @__PURE__ */ jsx25("strong", { children: formatCoursePriceDisplay(pricing.display) }) }),
30621
- acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption rb-mt-1", children: [
30771
+ acceptedItems.length > 0 ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
30622
30772
  "You can also attend with: ",
30623
30773
  acceptedItems.join(", ")
30624
30774
  ] }) : null
@@ -30626,7 +30776,7 @@ function CoursePricingDisplay({
30626
30776
  }
30627
30777
 
30628
30778
  // ../blocks/src/system/runtime/nodes/event-details/view.tsx
30629
- import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs13 } from "react/jsx-runtime";
30779
+ import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
30630
30780
  function formatAutoApplyDiscountLine(preview, currency) {
30631
30781
  const rate = preview.discountType === "percent" ? `${preview.discountPercent}% off` : `${formatCoursePriceAmount(preview.discountAmountCents, currency)} off`;
30632
30782
  const label = preview.publicLabel.trim() || "Discount";
@@ -30677,10 +30827,10 @@ function EventDetailsView({
30677
30827
  acceptedItems.push(...applicableMemberships.map((m) => m.name));
30678
30828
  }
30679
30829
  const hasAcceptedItems = acceptedItems.length > 0;
30680
- return /* @__PURE__ */ jsxs13("div", { className: "rb-flex rb-flex-col rb-gap-6 rb-text-left", children: [
30681
- /* @__PURE__ */ jsxs13("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
30682
- /* @__PURE__ */ jsxs13("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
30683
- /* @__PURE__ */ jsxs13("div", { children: [
30830
+ return /* @__PURE__ */ jsxs14("div", { className: "rb-flex rb-flex-col rb-gap-6 rb-text-left", children: [
30831
+ /* @__PURE__ */ jsxs14("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
30832
+ /* @__PURE__ */ jsxs14("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
30833
+ /* @__PURE__ */ jsxs14("div", { children: [
30684
30834
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: selection.mode === "next" ? "Next date" : "Date" }),
30685
30835
  (() => {
30686
30836
  const { date, timeRange } = formatEventDateParts({
@@ -30688,20 +30838,20 @@ function EventDetailsView({
30688
30838
  endsAt: selected.endsAt,
30689
30839
  timeZone: selection.timeZone
30690
30840
  });
30691
- return /* @__PURE__ */ jsxs13(Fragment3, { children: [
30841
+ return /* @__PURE__ */ jsxs14(Fragment3, { children: [
30692
30842
  /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: date }) }),
30693
30843
  /* @__PURE__ */ jsx26("p", { className: "rb-caption", children: timeRange })
30694
30844
  ] });
30695
30845
  })()
30696
30846
  ] }),
30697
- venue ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30847
+ venue ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30698
30848
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Venue" }),
30699
30849
  /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: venue.name }) }),
30700
30850
  venue.address ? /* @__PURE__ */ jsx26("p", { className: "rb-caption", children: venue.address }) : null
30701
30851
  ] }) : null,
30702
- teamMembers.length > 0 ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30852
+ teamMembers.length > 0 ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30703
30853
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Team members" }),
30704
- /* @__PURE__ */ jsx26("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs13("div", { children: [
30854
+ /* @__PURE__ */ jsx26("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs14("div", { children: [
30705
30855
  /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26(
30706
30856
  TeamMemberName,
30707
30857
  {
@@ -30712,7 +30862,7 @@ function EventDetailsView({
30712
30862
  teamMember.summary ? /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: teamMember.summary }) : null
30713
30863
  ] }, teamMember.id)) })
30714
30864
  ] }) : null,
30715
- isDropIn ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30865
+ isDropIn ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30716
30866
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Registration" }),
30717
30867
  /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: "No registration required - just show up" })
30718
30868
  ] }) : shouldShowCoursePricing ? /* @__PURE__ */ jsx26(
@@ -30721,22 +30871,22 @@ function EventDetailsView({
30721
30871
  pricing: coursePricing,
30722
30872
  acceptedItems
30723
30873
  }
30724
- ) : shouldShowEventCost ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30874
+ ) : shouldShowEventCost ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30725
30875
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Cost" }),
30726
30876
  eventPrice !== null ? /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: formatCoursePriceAmount(eventPrice, selected.currency ?? "USD") }) }) : /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: "See checkout for details" }),
30727
30877
  autoApplyDiscount ? /* @__PURE__ */ jsx26("p", { className: "rb-caption rb-mt-1", children: formatAutoApplyDiscountLine(autoApplyDiscount, selected.currency ?? "USD") }) : null,
30728
- hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
30878
+ hasAcceptedItems ? /* @__PURE__ */ jsxs14("p", { className: "rb-caption rb-mt-1", children: [
30729
30879
  "You can also attend with: ",
30730
30880
  acceptedItems.join(", ")
30731
30881
  ] }) : null
30732
- ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption", children: [
30882
+ ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs14("p", { className: "rb-caption", children: [
30733
30883
  "You can also attend with: ",
30734
30884
  acceptedItems.join(", ")
30735
30885
  ] }) }) : null
30736
30886
  ] }),
30737
30887
  showMap && renderVenueMap && venue?.location ? /* @__PURE__ */ jsx26(Fragment3, { children: renderVenueMap({ venueName: venue.name, location: venue.location, className: mapClassName, height: mapHeight }) }) : null
30738
30888
  ] }),
30739
- showOtherDates && selection.otherDates.length > 0 ? /* @__PURE__ */ jsxs13("div", { children: [
30889
+ showOtherDates && selection.otherDates.length > 0 ? /* @__PURE__ */ jsxs14("div", { children: [
30740
30890
  /* @__PURE__ */ jsx26("div", { className: "rb-label", children: "Other dates" }),
30741
30891
  /* @__PURE__ */ jsx26("div", { className: "rb-mt-2 rb-tiles-grid", children: selection.otherDates.map((e) => /* @__PURE__ */ jsx26(
30742
30892
  "a",
@@ -30759,7 +30909,7 @@ function EventDetailsView({
30759
30909
  }
30760
30910
 
30761
30911
  // ../blocks/src/system/runtime/nodes/event-details.server.tsx
30762
- import { jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
30912
+ import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
30763
30913
  function EventDetailsSSR({
30764
30914
  blockId,
30765
30915
  occurrenceContext,
@@ -30788,7 +30938,7 @@ function EventDetailsSSR({
30788
30938
  const membershipsArray = siteMemberships?.memberships ?? null;
30789
30939
  const applicablePasses = filterPassesForEvent(passesArray, selection.selected);
30790
30940
  const applicableMemberships = filterMembershipsForEvent(membershipsArray, selection.selected);
30791
- return /* @__PURE__ */ jsxs14(
30941
+ return /* @__PURE__ */ jsxs15(
30792
30942
  "div",
30793
30943
  {
30794
30944
  className: `event-details ${className ?? ""}`.trim(),
@@ -30854,7 +31004,7 @@ function EventDetailsSSR({
30854
31004
  var event_details_server_default = EventDetailsSSR;
30855
31005
 
30856
31006
  // ../blocks/src/system/runtime/nodes/location-map.view.tsx
30857
- import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
31007
+ import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
30858
31008
  function LocationMapView({
30859
31009
  addressText,
30860
31010
  location: location2,
@@ -30870,7 +31020,7 @@ function LocationMapView({
30870
31020
  if (!location2 && !addressText && !directionsUrl) {
30871
31021
  return /* @__PURE__ */ jsx28("p", { className: "rb-caption", style: textColorStyle("mutedText"), children: unresolvedMessage ?? "Location details coming soon." });
30872
31022
  }
30873
- return /* @__PURE__ */ jsxs15("div", { className: "rb-flex rb-flex-col rb-gap-4 rb-text-left", children: [
31023
+ return /* @__PURE__ */ jsxs16("div", { className: "rb-flex rb-flex-col rb-gap-4 rb-text-left", children: [
30874
31024
  location2 && renderMap ? renderMap({
30875
31025
  addressText,
30876
31026
  location: location2,
@@ -30898,11 +31048,11 @@ function LocationMapView({
30898
31048
  }
30899
31049
 
30900
31050
  // ../blocks/src/system/runtime/nodes/location-map.server.tsx
30901
- import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
31051
+ import { jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
30902
31052
  function LocationMapSSR(props2) {
30903
31053
  const normalized = normalizeLocationMapProps(props2);
30904
31054
  const hydrationProps = toLocationMapHydrationProps(props2);
30905
- return /* @__PURE__ */ jsxs16(
31055
+ return /* @__PURE__ */ jsxs17(
30906
31056
  "div",
30907
31057
  {
30908
31058
  className: `location-map ${normalized.className ?? ""}`.trim(),
@@ -31057,7 +31207,7 @@ function formatCourseDateRange(range) {
31057
31207
  }
31058
31208
 
31059
31209
  // ../blocks/src/system/runtime/nodes/course-details/view.tsx
31060
- import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
31210
+ import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
31061
31211
  function TeamMemberName2({
31062
31212
  name,
31063
31213
  profilePath
@@ -31092,14 +31242,14 @@ function CourseDetailsView(props2) {
31092
31242
  const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
31093
31243
  const descriptionDoc = showDescription ? coerceRichTextDoc(course.description) : null;
31094
31244
  const teamMembers = course.teamMembers ?? [];
31095
- return /* @__PURE__ */ jsxs17("div", { className: "rb-flex rb-flex-col rb-gap-6", children: [
31245
+ return /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-6", children: [
31096
31246
  showTitle && /* @__PURE__ */ jsx30("h3", { children: course.title }),
31097
- /* @__PURE__ */ jsxs17("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
31098
- /* @__PURE__ */ jsxs17("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31099
- showPrice && /* @__PURE__ */ jsxs17("div", { children: [
31247
+ /* @__PURE__ */ jsxs18("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
31248
+ /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31249
+ showPrice && /* @__PURE__ */ jsxs18("div", { children: [
31100
31250
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price" }),
31101
- pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx30("div", { className: "rb-flex rb-flex-col rb-gap-2", children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs17("div", { children: [
31102
- /* @__PURE__ */ jsxs17("strong", { children: [
31251
+ pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx30("div", { className: "rb-flex rb-flex-col rb-gap-2", children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs18("div", { children: [
31252
+ /* @__PURE__ */ jsxs18("strong", { children: [
31103
31253
  option.name,
31104
31254
  ": ",
31105
31255
  formatCoursePriceAmount(
@@ -31110,17 +31260,17 @@ function CourseDetailsView(props2) {
31110
31260
  option.description ? /* @__PURE__ */ jsx30("p", { className: "rb-caption status-muted", children: option.description }) : null
31111
31261
  ] }, option.id)) }) : /* @__PURE__ */ jsx30("div", { children: /* @__PURE__ */ jsx30("strong", { children: formatCoursePriceDisplay(pricing.display) }) })
31112
31262
  ] }),
31113
- showCapacity && /* @__PURE__ */ jsxs17("div", { children: [
31263
+ showCapacity && /* @__PURE__ */ jsxs18("div", { children: [
31114
31264
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Spots" }),
31115
31265
  /* @__PURE__ */ jsx30("div", { children: /* @__PURE__ */ jsx30("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })
31116
31266
  ] }),
31117
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs17("div", { children: [
31267
+ showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs18("div", { children: [
31118
31268
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Membership" }),
31119
31269
  /* @__PURE__ */ jsx30("p", { className: "rb-caption status-muted", children: "Eligible memberships can be used for free enrollment" })
31120
31270
  ] }),
31121
- teamMembers.length > 0 && /* @__PURE__ */ jsxs17("div", { children: [
31271
+ teamMembers.length > 0 && /* @__PURE__ */ jsxs18("div", { children: [
31122
31272
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Team members" }),
31123
- /* @__PURE__ */ jsx30("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs17("div", { children: [
31273
+ /* @__PURE__ */ jsx30("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs18("div", { children: [
31124
31274
  /* @__PURE__ */ jsx30("p", { children: /* @__PURE__ */ jsx30(
31125
31275
  TeamMemberName2,
31126
31276
  {
@@ -31132,23 +31282,23 @@ function CourseDetailsView(props2) {
31132
31282
  ] }, teamMember.id)) })
31133
31283
  ] })
31134
31284
  ] }),
31135
- /* @__PURE__ */ jsxs17("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31136
- showVenue && course.venue && /* @__PURE__ */ jsxs17("div", { children: [
31285
+ /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31286
+ showVenue && course.venue && /* @__PURE__ */ jsxs18("div", { children: [
31137
31287
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Venue" }),
31138
31288
  /* @__PURE__ */ jsx30("h3", { children: course.venue.name }),
31139
31289
  course.venue.address && /* @__PURE__ */ jsx30("p", { className: "rb-caption status-muted", children: course.venue.address })
31140
31290
  ] }),
31141
- showEnrollmentStatus && /* @__PURE__ */ jsxs17("div", { children: [
31291
+ showEnrollmentStatus && /* @__PURE__ */ jsxs18("div", { children: [
31142
31292
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Enrollment" }),
31143
31293
  /* @__PURE__ */ jsx30("p", { className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed", children: /* @__PURE__ */ jsx30("strong", { children: course.enrollmentOpen ? "Open" : "Closed" }) })
31144
31294
  ] })
31145
31295
  ] })
31146
31296
  ] }),
31147
31297
  descriptionDoc && /* @__PURE__ */ jsx30("div", { className: "cd-description", children: /* @__PURE__ */ jsx30(RichText, { doc: descriptionDoc }) }),
31148
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs17("div", { children: [
31298
+ showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs18("div", { children: [
31149
31299
  /* @__PURE__ */ jsx30("div", { className: "rb-label", children: "Sessions" }),
31150
31300
  /* @__PURE__ */ jsx30("div", { className: "rb-mt-2 rb-tiles-grid", children: visibleSessions.map((s) => /* @__PURE__ */ jsx30("div", { className: "rb-tile", children: /* @__PURE__ */ jsx30(DateTimeTile, { startsAt: s.startsAt, endsAt: s.endsAt }) }, s.id)) }),
31151
- hasMoreSessions && /* @__PURE__ */ jsxs17("p", { className: "cd-sessions__more", children: [
31301
+ hasMoreSessions && /* @__PURE__ */ jsxs18("p", { className: "cd-sessions__more", children: [
31152
31302
  "Showing ",
31153
31303
  visibleSessions.length,
31154
31304
  " of ",
@@ -31160,7 +31310,7 @@ function CourseDetailsView(props2) {
31160
31310
  }
31161
31311
 
31162
31312
  // ../blocks/src/system/runtime/nodes/course-details.server.tsx
31163
- import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
31313
+ import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
31164
31314
  function CourseDetailsSSR({
31165
31315
  courses,
31166
31316
  contentEntry,
@@ -31198,7 +31348,7 @@ function CourseDetailsSSR({
31198
31348
  const pastRuns = scopedWithRange.filter(({ range }) => Boolean(range.end && range.end <= now)).sort((a, b) => (b.range.end?.getTime() ?? 0) - (a.range.end?.getTime() ?? 0));
31199
31349
  const lastPastRun = pastRuns[0] ?? null;
31200
31350
  const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
31201
- return /* @__PURE__ */ jsxs18("div", { className: `course-details ${className ?? ""}`.trim(), "data-block": "course-details", children: [
31351
+ return /* @__PURE__ */ jsxs19("div", { className: `course-details ${className ?? ""}`.trim(), "data-block": "course-details", children: [
31202
31352
  selection.selected ? /* @__PURE__ */ jsx31(
31203
31353
  CourseDetailsView,
31204
31354
  {
@@ -31213,8 +31363,8 @@ function CourseDetailsSSR({
31213
31363
  showEnrollmentStatus,
31214
31364
  showMembershipNote
31215
31365
  }
31216
- ) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-3", children: [
31217
- /* @__PURE__ */ jsxs18("div", { children: [
31366
+ ) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs19("div", { className: "rb-flex rb-flex-col rb-gap-3", children: [
31367
+ /* @__PURE__ */ jsxs19("div", { children: [
31218
31368
  /* @__PURE__ */ jsx31("div", { className: "rb-label rb-mb-2", children: "Upcoming runs" }),
31219
31369
  /* @__PURE__ */ jsx31("p", { className: "rb-caption status-muted", children: "Choose a run to see sessions and details." })
31220
31370
  ] }),
@@ -31223,15 +31373,15 @@ function CourseDetailsSSR({
31223
31373
  const end = range.end;
31224
31374
  const isInProgress = Boolean(start && end && start <= now && end > now);
31225
31375
  const href = basePath ? `${basePath.replace(/\/$/, "")}/${course.slug}` : null;
31226
- return /* @__PURE__ */ jsx31("li", { className: "rb-rounded-md rb-border rb-p-3", children: /* @__PURE__ */ jsx31("div", { className: "rb-flex rb-flex-col rb-gap-1", children: /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-3", children: [
31227
- /* @__PURE__ */ jsxs18("div", { className: "rb-min-w-0", children: [
31376
+ return /* @__PURE__ */ jsx31("li", { className: "rb-rounded-md rb-border rb-p-3", children: /* @__PURE__ */ jsx31("div", { className: "rb-flex rb-flex-col rb-gap-1", children: /* @__PURE__ */ jsxs19("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-3", children: [
31377
+ /* @__PURE__ */ jsxs19("div", { className: "rb-min-w-0", children: [
31228
31378
  href ? /* @__PURE__ */ jsx31("a", { href, className: "rb-truncate", children: /* @__PURE__ */ jsx31("strong", { children: course.title }) }) : /* @__PURE__ */ jsx31("div", { className: "rb-truncate", children: /* @__PURE__ */ jsx31("strong", { children: course.title }) }),
31229
31379
  /* @__PURE__ */ jsx31("div", { className: "rb-caption status-muted", children: formatCourseDateRange(range) })
31230
31380
  ] }),
31231
31381
  /* @__PURE__ */ jsx31("div", { className: "rb-caption status-muted rb-shrink-0", children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed" })
31232
31382
  ] }) }) }, course.id);
31233
31383
  }) }) : /* @__PURE__ */ jsx31("p", { className: "rb-caption status-muted", children: "No upcoming runs." }),
31234
- lastPastRun ? /* @__PURE__ */ jsxs18("div", { className: "rb-caption status-muted", children: [
31384
+ lastPastRun ? /* @__PURE__ */ jsxs19("div", { className: "rb-caption status-muted", children: [
31235
31385
  "Last run: ",
31236
31386
  /* @__PURE__ */ jsx31("strong", { children: lastPastRun.course.title }),
31237
31387
  " (",
@@ -31259,14 +31409,14 @@ function CourseDetailsSSR({
31259
31409
  var course_details_server_default = CourseDetailsSSR;
31260
31410
 
31261
31411
  // ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
31262
- import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
31412
+ import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
31263
31413
  var EventSpotlight = ({
31264
31414
  events,
31265
31415
  layout = "grid",
31266
31416
  columns = "3",
31267
31417
  cardVariant = "default",
31268
31418
  buttonVariant = "primary",
31269
- buttonText = "View event",
31419
+ buttonText = "Book now",
31270
31420
  ctaLabel,
31271
31421
  ctaUrl,
31272
31422
  showVenue = true,
@@ -31282,7 +31432,7 @@ var EventSpotlight = ({
31282
31432
  const containerClass = getContainerClass(layout, columns);
31283
31433
  const cardOrientation = getCardOrientation(layout);
31284
31434
  const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
31285
- return /* @__PURE__ */ jsxs19("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
31435
+ return /* @__PURE__ */ jsxs20("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
31286
31436
  /* @__PURE__ */ jsx32("div", { className: `event-spotlight ${containerClass}`, children: normalizedEvents.map((event) => /* @__PURE__ */ jsx32(
31287
31437
  EventCard,
31288
31438
  {
@@ -31420,7 +31570,7 @@ function buildEventCombinedDisplay(source) {
31420
31570
  showMap: source.showMap ?? true,
31421
31571
  showCapacity: source.showCapacity ?? true,
31422
31572
  buttonVariant: source.buttonVariant ?? "primary",
31423
- buttonText: source.buttonText ?? "View event",
31573
+ buttonText: source.buttonText ?? "Book now",
31424
31574
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
31425
31575
  };
31426
31576
  }
@@ -31521,7 +31671,7 @@ function renderEventListItem(event, display) {
31521
31671
  }
31522
31672
 
31523
31673
  // ../blocks/src/system/runtime/nodes/events/EventCombined.server.tsx
31524
- import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
31674
+ import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
31525
31675
  var EventCombinedSSR = ({
31526
31676
  blockId,
31527
31677
  ...source
@@ -31530,7 +31680,7 @@ var EventCombinedSSR = ({
31530
31680
  const listDisplay = buildEventCombinedListingDisplay(render);
31531
31681
  const islandProps = buildEventCombinedInteractiveIslandProps(source);
31532
31682
  const ssrEmptyMessage = render.hydration.prefetchedEvents ? render.display.emptyMessage : listDisplay.loadingMessage;
31533
- return /* @__PURE__ */ jsxs20(
31683
+ return /* @__PURE__ */ jsxs21(
31534
31684
  "div",
31535
31685
  {
31536
31686
  className: `event-combined ${render.display.className || ""}`,
@@ -31538,7 +31688,7 @@ var EventCombinedSSR = ({
31538
31688
  ...getIslandRootProps("event-combined", blockId),
31539
31689
  children: [
31540
31690
  /* @__PURE__ */ jsx34(IslandPropsScript, { value: islandProps }),
31541
- /* @__PURE__ */ jsxs20("div", { className: "nav-tabs", role: "tablist", children: [
31691
+ /* @__PURE__ */ jsxs21("div", { className: "nav-tabs", role: "tablist", children: [
31542
31692
  /* @__PURE__ */ jsx34(
31543
31693
  "button",
31544
31694
  {
@@ -31567,7 +31717,7 @@ var EventCombinedSSR = ({
31567
31717
  };
31568
31718
 
31569
31719
  // ../blocks/src/system/runtime/nodes/commerce/shared/view.tsx
31570
- import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
31720
+ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
31571
31721
  function ProductBadgesView({ badges }) {
31572
31722
  if (badges.length === 0) return null;
31573
31723
  return /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-flex-wrap rb-gap-2", children: badges.map((badge) => /* @__PURE__ */ jsx35(
@@ -31582,7 +31732,7 @@ function ProductBadgesView({ badges }) {
31582
31732
  function VariantSelectView(props2) {
31583
31733
  const { options, selectedVariantId, disabled = false, onChange } = props2;
31584
31734
  if (options.length === 0) return null;
31585
- return /* @__PURE__ */ jsxs21("label", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31735
+ return /* @__PURE__ */ jsxs22("label", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31586
31736
  /* @__PURE__ */ jsx35("span", { className: "rb-label", children: "Variant" }),
31587
31737
  /* @__PURE__ */ jsx35(
31588
31738
  "select",
@@ -31591,7 +31741,7 @@ function VariantSelectView(props2) {
31591
31741
  value: selectedVariantId ?? "",
31592
31742
  disabled,
31593
31743
  onChange: onChange ? (event) => onChange(event.target.value || null) : void 0,
31594
- children: options.map((variant) => /* @__PURE__ */ jsxs21("option", { value: variant.id, children: [
31744
+ children: options.map((variant) => /* @__PURE__ */ jsxs22("option", { value: variant.id, children: [
31595
31745
  variant.label,
31596
31746
  " ",
31597
31747
  variant.soldOut ? "(Sold out)" : ""
@@ -31602,12 +31752,12 @@ function VariantSelectView(props2) {
31602
31752
  }
31603
31753
  function ProductCardView(props2) {
31604
31754
  const { display, layout, variantControl, actions, feedback } = props2;
31605
- return /* @__PURE__ */ jsxs21("article", { className: `rb-flex rb-gap-4 rb-rounded-2xl rb-border rb-p-4 ${layout === "list" ? "rb-flex-row" : "rb-flex-col"}`, children: [
31755
+ return /* @__PURE__ */ jsxs22("article", { className: `rb-flex rb-gap-4 rb-rounded-2xl rb-border rb-p-4 ${layout === "list" ? "rb-flex-row" : "rb-flex-col"}`, children: [
31606
31756
  display.image ? /* @__PURE__ */ jsx35("a", { href: display.path ?? void 0, className: "rb-block rb-overflow-hidden rb-rounded-xl rb-border", children: /* @__PURE__ */ jsx35("img", { src: display.image.url, alt: display.image.alt ?? "", className: "rb-h-48 rb-w-full rb-object-cover" }) }) : null,
31607
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-1 rb-flex-col rb-gap-3", children: [
31608
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31609
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-start rb-justify-between rb-gap-3", children: [
31610
- /* @__PURE__ */ jsxs21("div", { children: [
31757
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-1 rb-flex-col rb-gap-3", children: [
31758
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31759
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-start rb-justify-between rb-gap-3", children: [
31760
+ /* @__PURE__ */ jsxs22("div", { children: [
31611
31761
  display.path ? /* @__PURE__ */ jsx35("a", { href: display.path, children: /* @__PURE__ */ jsx35("h3", { children: display.title }) }) : /* @__PURE__ */ jsx35("h3", { children: display.title }),
31612
31762
  display.summary ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.summary }) : null
31613
31763
  ] }),
@@ -31624,7 +31774,7 @@ function ProductCardView(props2) {
31624
31774
  }
31625
31775
  function ProductListSectionView(props2) {
31626
31776
  const { display, children } = props2;
31627
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--product-list ${display.className ?? ""}`.trim(), "data-block": "shop", children: [
31777
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--product-list ${display.className ?? ""}`.trim(), "data-block": "shop", children: [
31628
31778
  display.heading ? /* @__PURE__ */ jsx35("h2", { children: display.heading }) : null,
31629
31779
  display.state === "empty" ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.emptyMessage }) : /* @__PURE__ */ jsx35(
31630
31780
  "div",
@@ -31641,18 +31791,18 @@ function ProductDetailView(props2) {
31641
31791
  if (display.state === "empty") {
31642
31792
  return /* @__PURE__ */ jsx35("div", { className: `shop shop--product-detail ${display.className ?? ""}`.trim(), "data-block": "shop", children: /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.emptyMessage }) });
31643
31793
  }
31644
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--product-detail rb-grid rb-gap-6 rb-md-grid-cols-2 ${display.className ?? ""}`.trim(), "data-block": "shop", children: [
31794
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--product-detail rb-grid rb-gap-6 rb-md-grid-cols-2 ${display.className ?? ""}`.trim(), "data-block": "shop", children: [
31645
31795
  /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-flex-col rb-gap-4", children: gallery }),
31646
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31796
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31647
31797
  display.heading ? /* @__PURE__ */ jsx35("p", { className: "rb-label", children: display.heading }) : null,
31648
- /* @__PURE__ */ jsxs21("div", { children: [
31798
+ /* @__PURE__ */ jsxs22("div", { children: [
31649
31799
  /* @__PURE__ */ jsx35("h2", { children: display.title }),
31650
31800
  /* @__PURE__ */ jsx35("div", { className: "rb-mt-2", children: /* @__PURE__ */ jsx35("strong", { children: display.priceLabel }) })
31651
31801
  ] }),
31652
31802
  /* @__PURE__ */ jsx35(ProductBadgesView, { badges: display.badges }),
31653
31803
  display.summary ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.summary }) : null,
31654
31804
  variantControl,
31655
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-center rb-gap-3", children: [
31805
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-center rb-gap-3", children: [
31656
31806
  actions,
31657
31807
  display.categoryLabel ? /* @__PURE__ */ jsx35("span", { className: "rb-caption status-muted", children: display.categoryLabel }) : null
31658
31808
  ] }),
@@ -31678,15 +31828,15 @@ function ProductGalleryFrameView(props2) {
31678
31828
  return /* @__PURE__ */ jsx35(Fragment4, { children: renderCarousel(slides) });
31679
31829
  }
31680
31830
  function PassCardView(props2) {
31681
- return /* @__PURE__ */ jsxs21("article", { className: "shop__card shop__card--pass", children: [
31682
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-header", children: [
31831
+ return /* @__PURE__ */ jsxs22("article", { className: "shop__card shop__card--pass", children: [
31832
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-header", children: [
31683
31833
  /* @__PURE__ */ jsx35("h4", { className: "shop__card-name", children: props2.display.title }),
31684
31834
  /* @__PURE__ */ jsx35("div", { className: "shop__card-price", children: props2.display.priceLabel })
31685
31835
  ] }),
31686
31836
  props2.display.description ? /* @__PURE__ */ jsx35("p", { className: "shop__card-description", children: props2.display.description }) : null,
31687
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-details", children: [
31837
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-details", children: [
31688
31838
  /* @__PURE__ */ jsx35("span", { className: "shop__card-credits", children: props2.display.creditsLabel }),
31689
- props2.display.perCreditLabel ? /* @__PURE__ */ jsxs21("span", { className: "shop__card-per-credit", children: [
31839
+ props2.display.perCreditLabel ? /* @__PURE__ */ jsxs22("span", { className: "shop__card-per-credit", children: [
31690
31840
  "(",
31691
31841
  props2.display.perCreditLabel,
31692
31842
  ")"
@@ -31698,10 +31848,10 @@ function PassCardView(props2) {
31698
31848
  ] });
31699
31849
  }
31700
31850
  function MembershipCardView(props2) {
31701
- return /* @__PURE__ */ jsxs21("article", { className: "shop__card shop__card--membership", children: [
31702
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-header", children: [
31851
+ return /* @__PURE__ */ jsxs22("article", { className: "shop__card shop__card--membership", children: [
31852
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-header", children: [
31703
31853
  /* @__PURE__ */ jsx35("h4", { className: "shop__card-name", children: props2.display.title }),
31704
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-price", children: [
31854
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-price", children: [
31705
31855
  props2.display.priceLabel,
31706
31856
  /* @__PURE__ */ jsx35("span", { className: "shop__card-interval", children: props2.display.intervalLabel })
31707
31857
  ] })
@@ -31715,7 +31865,7 @@ function PassesMembershipsSectionView(props2) {
31715
31865
  const { display, beforeContent, passCards, membershipCards } = props2;
31716
31866
  const productsClass = `shop__products shop__products--${display.layout}`;
31717
31867
  const gridStyle = display.state === "ready" ? { "--shop-columns": display.columns } : void 0;
31718
- return /* @__PURE__ */ jsxs21(
31868
+ return /* @__PURE__ */ jsxs22(
31719
31869
  "div",
31720
31870
  {
31721
31871
  className: `shop ${display.state === "ready" ? `shop--${display.layout}` : "shop--empty"} ${display.className ?? ""}`.trim(),
@@ -31725,11 +31875,11 @@ function PassesMembershipsSectionView(props2) {
31725
31875
  children: [
31726
31876
  beforeContent,
31727
31877
  display.state === "empty" ? /* @__PURE__ */ jsx35("p", { className: "shop__empty-text", children: display.emptyMessage }) : null,
31728
- display.passes.length > 0 ? /* @__PURE__ */ jsxs21("section", { className: "shop__section shop__section--passes", children: [
31878
+ display.passes.length > 0 ? /* @__PURE__ */ jsxs22("section", { className: "shop__section shop__section--passes", children: [
31729
31879
  /* @__PURE__ */ jsx35("h3", { className: "shop__section-heading", children: display.passesHeading }),
31730
31880
  /* @__PURE__ */ jsx35("div", { className: productsClass, children: passCards })
31731
31881
  ] }) : null,
31732
- display.memberships.length > 0 ? /* @__PURE__ */ jsxs21("section", { className: "shop__section shop__section--memberships", children: [
31882
+ display.memberships.length > 0 ? /* @__PURE__ */ jsxs22("section", { className: "shop__section shop__section--memberships", children: [
31733
31883
  /* @__PURE__ */ jsx35("h3", { className: "shop__section-heading", children: display.membershipsHeading }),
31734
31884
  /* @__PURE__ */ jsx35("div", { className: productsClass, children: membershipCards })
31735
31885
  ] }) : null
@@ -31739,21 +31889,21 @@ function PassesMembershipsSectionView(props2) {
31739
31889
  }
31740
31890
  function CartShellView(props2) {
31741
31891
  const { display, renderControls, footerActions } = props2;
31742
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--cart ${display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-cart", children: [
31892
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--cart ${display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-cart", children: [
31743
31893
  display.heading ? /* @__PURE__ */ jsx35("h2", { children: display.heading }) : null,
31744
- display.state === "empty" ? /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31894
+ display.state === "empty" ? /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31745
31895
  /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.emptyMessage }),
31746
31896
  display.supportText ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.supportText }) : null
31747
- ] }) : /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31748
- /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-flex-col rb-gap-3", children: display.items.map((item) => /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-4 rb-rounded-xl rb-border rb-p-4", children: [
31749
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31897
+ ] }) : /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31898
+ /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-flex-col rb-gap-3", children: display.items.map((item) => /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-4 rb-rounded-xl rb-border rb-p-4", children: [
31899
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31750
31900
  /* @__PURE__ */ jsx35("strong", { children: item.title }),
31751
31901
  /* @__PURE__ */ jsx35("span", { className: "rb-caption status-muted", children: item.priceLabel })
31752
31902
  ] }),
31753
31903
  /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-items-center rb-gap-2", children: renderControls ? renderControls(item) : null })
31754
31904
  ] }, item.key)) }),
31755
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-4", children: [
31756
- /* @__PURE__ */ jsxs21("div", { children: [
31905
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-4", children: [
31906
+ /* @__PURE__ */ jsxs22("div", { children: [
31757
31907
  /* @__PURE__ */ jsx35("strong", { children: "Subtotal" }),
31758
31908
  /* @__PURE__ */ jsx35("div", { children: display.subtotalLabel })
31759
31909
  ] }),
@@ -31763,7 +31913,7 @@ function CartShellView(props2) {
31763
31913
  ] });
31764
31914
  }
31765
31915
  function CheckoutShellView(props2) {
31766
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--checkout ${props2.display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-checkout", children: [
31916
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--checkout ${props2.display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-checkout", children: [
31767
31917
  props2.display.heading ? /* @__PURE__ */ jsx35("h2", { children: props2.display.heading }) : null,
31768
31918
  props2.notice,
31769
31919
  props2.display.state === "ready" ? props2.body : /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: props2.display.message })
@@ -31771,9 +31921,9 @@ function CheckoutShellView(props2) {
31771
31921
  }
31772
31922
 
31773
31923
  // ../blocks/src/system/runtime/nodes/shop-commerce.server.tsx
31774
- import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
31924
+ import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
31775
31925
  function renderServerPendingAction(label, soldOut) {
31776
- return /* @__PURE__ */ jsxs22(Fragment5, { children: [
31926
+ return /* @__PURE__ */ jsxs23(Fragment5, { children: [
31777
31927
  /* @__PURE__ */ jsx36(
31778
31928
  "button",
31779
31929
  {
@@ -31801,7 +31951,7 @@ function ProductListServerContent(props2) {
31801
31951
  disabled: true
31802
31952
  }
31803
31953
  ),
31804
- actions: /* @__PURE__ */ jsxs22(Fragment5, { children: [
31954
+ actions: /* @__PURE__ */ jsxs23(Fragment5, { children: [
31805
31955
  renderServerPendingAction(card.actionLabel, card.soldOut),
31806
31956
  card.path ? /* @__PURE__ */ jsx36(
31807
31957
  "a",
@@ -31852,7 +32002,7 @@ function CheckoutServerContent(props2) {
31852
32002
  }
31853
32003
 
31854
32004
  // ../blocks/src/system/runtime/nodes/cart.server.tsx
31855
- import { jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
32005
+ import { jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
31856
32006
  function CartSSR({
31857
32007
  blockId,
31858
32008
  siteId,
@@ -31867,7 +32017,7 @@ function CartSSR({
31867
32017
  stage,
31868
32018
  ...rest
31869
32019
  });
31870
- return /* @__PURE__ */ jsxs23(
32020
+ return /* @__PURE__ */ jsxs24(
31871
32021
  "div",
31872
32022
  {
31873
32023
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -31887,7 +32037,7 @@ function CartSSR({
31887
32037
  var cart_server_default = CartSSR;
31888
32038
 
31889
32039
  // ../blocks/src/system/runtime/nodes/checkout.server.tsx
31890
- import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
32040
+ import { jsx as jsx38, jsxs as jsxs25 } from "react/jsx-runtime";
31891
32041
  function CheckoutSSR({
31892
32042
  blockId,
31893
32043
  siteId,
@@ -31902,7 +32052,7 @@ function CheckoutSSR({
31902
32052
  stage,
31903
32053
  ...rest
31904
32054
  });
31905
- return /* @__PURE__ */ jsxs24(
32055
+ return /* @__PURE__ */ jsxs25(
31906
32056
  "div",
31907
32057
  {
31908
32058
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -31922,7 +32072,7 @@ function CheckoutSSR({
31922
32072
  var checkout_server_default = CheckoutSSR;
31923
32073
 
31924
32074
  // ../blocks/src/system/runtime/nodes/course-registration.server.tsx
31925
- import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
32075
+ import { jsx as jsx39, jsxs as jsxs26 } from "react/jsx-runtime";
31926
32076
  function CourseRegistrationSSR({
31927
32077
  blockId,
31928
32078
  siteId,
@@ -31963,7 +32113,7 @@ function CourseRegistrationSSR({
31963
32113
  buttonVariant,
31964
32114
  stage
31965
32115
  });
31966
- return /* @__PURE__ */ jsxs25(
32116
+ return /* @__PURE__ */ jsxs26(
31967
32117
  "div",
31968
32118
  {
31969
32119
  className: `course-registration ${className ?? ""}`.trim(),
@@ -31980,14 +32130,14 @@ function CourseRegistrationSSR({
31980
32130
  var course_registration_server_default = CourseRegistrationSSR;
31981
32131
 
31982
32132
  // ../blocks/src/system/runtime/nodes/gifting.server.tsx
31983
- import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
32133
+ import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
31984
32134
  function GiftingSSR({ blockId, ...rest }) {
31985
32135
  const islandProps = buildGiftingInteractiveIslandProps(rest);
31986
32136
  const offers = islandProps.render.hydration.offers;
31987
32137
  const hasOffers = Boolean(
31988
32138
  (offers?.giftCards.length ?? 0) > 0 || (offers?.vouchers.length ?? 0) > 0
31989
32139
  );
31990
- return /* @__PURE__ */ jsxs26(
32140
+ return /* @__PURE__ */ jsxs27(
31991
32141
  "section",
31992
32142
  {
31993
32143
  className: rest.className ?? void 0,
@@ -31998,7 +32148,7 @@ function GiftingSSR({ blockId, ...rest }) {
31998
32148
  ...getIslandRootProps("gifting", blockId),
31999
32149
  children: [
32000
32150
  /* @__PURE__ */ jsx40(IslandPropsScript, { value: islandProps }),
32001
- /* @__PURE__ */ jsxs26(
32151
+ /* @__PURE__ */ jsxs27(
32002
32152
  "div",
32003
32153
  {
32004
32154
  className: "rb-grid",
@@ -32006,14 +32156,14 @@ function GiftingSSR({ blockId, ...rest }) {
32006
32156
  gap: "1.5rem"
32007
32157
  },
32008
32158
  children: [
32009
- /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "0.5rem" }, children: [
32159
+ /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "0.5rem" }, children: [
32010
32160
  /* @__PURE__ */ jsx40("h2", { style: { fontSize: "clamp(1.75rem, 3vw, 2.5rem)", fontWeight: 700, margin: 0 }, children: islandProps.render.display.heading }),
32011
32161
  islandProps.render.display.intro ? /* @__PURE__ */ jsx40("p", { style: { margin: 0, color: "rgb(var(--tb-text, 17 24 39) / 0.72)" }, children: islandProps.render.display.intro }) : null
32012
32162
  ] }),
32013
- hasOffers ? /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "1.5rem" }, children: [
32014
- (offers?.giftCards.length ?? 0) > 0 ? /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32163
+ hasOffers ? /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "1.5rem" }, children: [
32164
+ (offers?.giftCards.length ?? 0) > 0 ? /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32015
32165
  /* @__PURE__ */ jsx40("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.giftCardsHeading }),
32016
- /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.giftCards.map((offer) => /* @__PURE__ */ jsxs26(
32166
+ /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.giftCards.map((offer) => /* @__PURE__ */ jsxs27(
32017
32167
  "article",
32018
32168
  {
32019
32169
  style: {
@@ -32030,9 +32180,9 @@ function GiftingSSR({ blockId, ...rest }) {
32030
32180
  offer.id
32031
32181
  )) })
32032
32182
  ] }) : null,
32033
- (offers?.vouchers.length ?? 0) > 0 ? /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32183
+ (offers?.vouchers.length ?? 0) > 0 ? /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32034
32184
  /* @__PURE__ */ jsx40("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.vouchersHeading }),
32035
- /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.vouchers.map((offer) => /* @__PURE__ */ jsxs26(
32185
+ /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.vouchers.map((offer) => /* @__PURE__ */ jsxs27(
32036
32186
  "article",
32037
32187
  {
32038
32188
  style: {
@@ -32060,10 +32210,10 @@ function GiftingSSR({ blockId, ...rest }) {
32060
32210
  var gifting_server_default = GiftingSSR;
32061
32211
 
32062
32212
  // ../blocks/src/system/runtime/nodes/events/EventListing.view.tsx
32063
- import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
32213
+ import { jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
32064
32214
  function EventListingFrameView(props2) {
32065
32215
  const { display, filters, emptyState: emptyState4, footer, renderEventCard: renderEventCard2 } = props2;
32066
- return /* @__PURE__ */ jsxs27("div", { className: `event-listing ${display.className ?? ""}`, "data-block": "event-listing", children: [
32216
+ return /* @__PURE__ */ jsxs28("div", { className: `event-listing ${display.className ?? ""}`, "data-block": "event-listing", children: [
32067
32217
  filters,
32068
32218
  display.state === "loading" ? /* @__PURE__ */ jsx41(EmptyState, { message: display.loadingMessage }) : display.state === "empty" ? emptyState4 ?? /* @__PURE__ */ jsx41(EmptyState, { message: display.emptyMessage }) : /* @__PURE__ */ jsx41("div", { className: display.containerClass, children: display.events.map((event) => renderEventCard2(event)) }),
32069
32219
  footer
@@ -32142,7 +32292,7 @@ function formatShortDayLabel(date) {
32142
32292
  }
32143
32293
 
32144
32294
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.server.tsx
32145
- import { jsx as jsx42, jsxs as jsxs28 } from "react/jsx-runtime";
32295
+ import { jsx as jsx42, jsxs as jsxs29 } from "react/jsx-runtime";
32146
32296
  function assertNeverDisplayMode(value) {
32147
32297
  throw new Error(`Unsupported event-calendar displayMode: ${String(value)}`);
32148
32298
  }
@@ -32154,8 +32304,8 @@ function renderEventCard(event, display) {
32154
32304
  }
32155
32305
  function renderCombinedSsr(display, prefetchedEvents) {
32156
32306
  const listDisplay = buildEventCalendarListingDisplay(display, prefetchedEvents, "event-combined-content");
32157
- return /* @__PURE__ */ jsxs28("div", { className: clsx_default("event-combined", display.className ?? void 0), "data-block": "event-combined", children: [
32158
- /* @__PURE__ */ jsxs28("div", { className: "nav-tabs", role: "tablist", children: [
32307
+ return /* @__PURE__ */ jsxs29("div", { className: clsx_default("event-combined", display.className ?? void 0), "data-block": "event-combined", children: [
32308
+ /* @__PURE__ */ jsxs29("div", { className: "nav-tabs", role: "tablist", children: [
32159
32309
  /* @__PURE__ */ jsx42(
32160
32310
  "button",
32161
32311
  {
@@ -32203,9 +32353,9 @@ function renderCalendarGrid(display) {
32203
32353
  const eventsByDate = groupEventsByDate([...display.events]);
32204
32354
  const dayNames = getOrderedDayNames(display.startOfWeek);
32205
32355
  const headerTitle = formatCalendarTitle(viewDate, calendarView, calendarDays);
32206
- return /* @__PURE__ */ jsxs28("div", { className: clsx_default("event-calendar", display.className ?? void 0), "data-block": "event-calendar", children: [
32207
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-header", children: [
32208
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-nav", children: [
32356
+ return /* @__PURE__ */ jsxs29("div", { className: clsx_default("event-calendar", display.className ?? void 0), "data-block": "event-calendar", children: [
32357
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-header", children: [
32358
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-nav", children: [
32209
32359
  /* @__PURE__ */ jsx42(
32210
32360
  "button",
32211
32361
  {
@@ -32238,7 +32388,7 @@ function renderCalendarGrid(display) {
32238
32388
  }
32239
32389
  )
32240
32390
  ] }),
32241
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-container", children: [
32391
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-container", children: [
32242
32392
  /* @__PURE__ */ jsx42("div", { className: "event-calendar-day-headers", children: dayNames.map((day) => /* @__PURE__ */ jsx42("div", { className: "event-calendar-day-header", children: day }, day)) }),
32243
32393
  /* @__PURE__ */ jsx42("div", { className: "event-calendar-grid", children: calendarDays.map((date) => {
32244
32394
  const dateKey = formatDateKey2(date);
@@ -32250,10 +32400,10 @@ function renderCalendarGrid(display) {
32250
32400
  !isCurrentMonth && "event-calendar-day--other-month",
32251
32401
  today && "event-calendar-day--today"
32252
32402
  );
32253
- return /* @__PURE__ */ jsxs28("div", { className: dayClasses, children: [
32403
+ return /* @__PURE__ */ jsxs29("div", { className: dayClasses, children: [
32254
32404
  /* @__PURE__ */ jsx42("div", { className: "event-calendar-day-number", children: date.getDate() }),
32255
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-events", children: [
32256
- dayEvents.slice(0, MAX_EVENTS_PER_DAY).map((event) => /* @__PURE__ */ jsxs28(
32405
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-events", children: [
32406
+ dayEvents.slice(0, MAX_EVENTS_PER_DAY).map((event) => /* @__PURE__ */ jsxs29(
32257
32407
  "a",
32258
32408
  {
32259
32409
  href: event.path,
@@ -32267,7 +32417,7 @@ function renderCalendarGrid(display) {
32267
32417
  },
32268
32418
  event.occurrenceId || event.id
32269
32419
  )),
32270
- dayEvents.length > MAX_EVENTS_PER_DAY ? /* @__PURE__ */ jsxs28("div", { className: "event-calendar-more", children: [
32420
+ dayEvents.length > MAX_EVENTS_PER_DAY ? /* @__PURE__ */ jsxs29("div", { className: "event-calendar-more", children: [
32271
32421
  "+",
32272
32422
  dayEvents.length - MAX_EVENTS_PER_DAY,
32273
32423
  " more"
@@ -32289,9 +32439,9 @@ function renderTimetableSsr(display) {
32289
32439
  const calendarDays = getWeekCalendarDays(viewDate, display.startOfWeek);
32290
32440
  const headerTitle = formatCalendarTitle(viewDate, "week", calendarDays);
32291
32441
  const selectedDayKey = model.days.find((day) => day.isToday)?.dateKey ?? model.days[0]?.dateKey ?? "";
32292
- return /* @__PURE__ */ jsxs28("div", { className: clsx_default("event-calendar", "event-calendar--timetable", display.className ?? void 0), "data-block": "event-calendar", children: [
32293
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-header", children: [
32294
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-nav", children: [
32442
+ return /* @__PURE__ */ jsxs29("div", { className: clsx_default("event-calendar", "event-calendar--timetable", display.className ?? void 0), "data-block": "event-calendar", children: [
32443
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-header", children: [
32444
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-nav", children: [
32295
32445
  /* @__PURE__ */ jsx42(
32296
32446
  "button",
32297
32447
  {
@@ -32324,7 +32474,7 @@ function renderTimetableSsr(display) {
32324
32474
  }
32325
32475
  )
32326
32476
  ] }),
32327
- /* @__PURE__ */ jsxs28("div", { className: "event-timetable", children: [
32477
+ /* @__PURE__ */ jsxs29("div", { className: "event-timetable", children: [
32328
32478
  /* @__PURE__ */ jsx42("div", { className: "event-timetable-day-selector", "aria-label": "Choose timetable day", children: model.days.map((day) => /* @__PURE__ */ jsx42(
32329
32479
  "button",
32330
32480
  {
@@ -32337,8 +32487,8 @@ function renderTimetableSsr(display) {
32337
32487
  },
32338
32488
  day.dateKey
32339
32489
  )) }),
32340
- /* @__PURE__ */ jsx42("div", { className: "event-timetable-container", children: /* @__PURE__ */ jsxs28("div", { className: "event-timetable-grid", "aria-label": "Weekly timetable", children: [
32341
- /* @__PURE__ */ jsxs28("div", { className: "event-timetable-time-rail", "aria-hidden": "true", children: [
32490
+ /* @__PURE__ */ jsx42("div", { className: "event-timetable-container", children: /* @__PURE__ */ jsxs29("div", { className: "event-timetable-grid", "aria-label": "Weekly timetable", children: [
32491
+ /* @__PURE__ */ jsxs29("div", { className: "event-timetable-time-rail", "aria-hidden": "true", children: [
32342
32492
  /* @__PURE__ */ jsx42("div", { className: "event-timetable-day-heading" }),
32343
32493
  /* @__PURE__ */ jsx42("div", { className: "event-timetable-time-body", children: model.hourTicks.map((hour) => /* @__PURE__ */ jsx42(
32344
32494
  "div",
@@ -32350,7 +32500,7 @@ function renderTimetableSsr(display) {
32350
32500
  hour
32351
32501
  )) })
32352
32502
  ] }),
32353
- model.days.map((day) => /* @__PURE__ */ jsxs28(
32503
+ model.days.map((day) => /* @__PURE__ */ jsxs29(
32354
32504
  "section",
32355
32505
  {
32356
32506
  className: clsx_default(
@@ -32359,11 +32509,11 @@ function renderTimetableSsr(display) {
32359
32509
  ),
32360
32510
  "data-selected": day.dateKey === selectedDayKey ? "true" : "false",
32361
32511
  children: [
32362
- /* @__PURE__ */ jsxs28("h4", { className: "event-timetable-day-heading", children: [
32512
+ /* @__PURE__ */ jsxs29("h4", { className: "event-timetable-day-heading", children: [
32363
32513
  day.label,
32364
32514
  day.isToday ? /* @__PURE__ */ jsx42("span", { className: "event-timetable-today-badge", children: "Today" }) : null
32365
32515
  ] }),
32366
- /* @__PURE__ */ jsxs28(
32516
+ /* @__PURE__ */ jsxs29(
32367
32517
  "div",
32368
32518
  {
32369
32519
  className: "event-timetable-day-body",
@@ -32378,7 +32528,7 @@ function renderTimetableSsr(display) {
32378
32528
  },
32379
32529
  hour
32380
32530
  )),
32381
- day.events.length === 0 ? /* @__PURE__ */ jsx42("p", { className: "event-timetable-day-empty", children: "No classes" }) : day.events.map((cell) => /* @__PURE__ */ jsxs28(
32531
+ day.events.length === 0 ? /* @__PURE__ */ jsx42("p", { className: "event-timetable-day-empty", children: "No classes" }) : day.events.map((cell) => /* @__PURE__ */ jsxs29(
32382
32532
  "a",
32383
32533
  {
32384
32534
  href: cell.event.path,
@@ -32455,18 +32605,18 @@ var EventCalendarSSR = (props2) => {
32455
32605
  default:
32456
32606
  content = assertNeverDisplayMode(display.displayMode);
32457
32607
  }
32458
- return /* @__PURE__ */ jsxs28("div", { ...getIslandRootProps("event-calendar", props2.blockId), children: [
32608
+ return /* @__PURE__ */ jsxs29("div", { ...getIslandRootProps("event-calendar", props2.blockId), children: [
32459
32609
  /* @__PURE__ */ jsx42(IslandPropsScript, { value: islandProps }),
32460
32610
  content
32461
32611
  ] });
32462
32612
  };
32463
32613
 
32464
32614
  // ../blocks/src/system/runtime/nodes/events/EventListing.server.tsx
32465
- import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
32615
+ import { jsx as jsx43, jsxs as jsxs30 } from "react/jsx-runtime";
32466
32616
  var EventListingSSR = (props2) => {
32467
32617
  const islandProps = buildEventListingInteractiveIslandProps(props2);
32468
32618
  const display = islandProps.render.display;
32469
- return /* @__PURE__ */ jsxs29("div", { ...getIslandRootProps("event-listing", props2.blockId), children: [
32619
+ return /* @__PURE__ */ jsxs30("div", { ...getIslandRootProps("event-listing", props2.blockId), children: [
32470
32620
  /* @__PURE__ */ jsx43(IslandPropsScript, { value: islandProps }),
32471
32621
  /* @__PURE__ */ jsx43(
32472
32622
  EventListingFrameView,
@@ -32479,7 +32629,7 @@ var EventListingSSR = (props2) => {
32479
32629
  };
32480
32630
 
32481
32631
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
32482
- import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
32632
+ import { jsx as jsx44, jsxs as jsxs31 } from "react/jsx-runtime";
32483
32633
  function EventRegistrationSSR({
32484
32634
  blockId,
32485
32635
  siteId,
@@ -32520,7 +32670,7 @@ function EventRegistrationSSR({
32520
32670
  stage,
32521
32671
  supportEmail
32522
32672
  });
32523
- return /* @__PURE__ */ jsxs30(
32673
+ return /* @__PURE__ */ jsxs31(
32524
32674
  "div",
32525
32675
  {
32526
32676
  className: `event-registration ${className ?? ""}`.trim(),
@@ -32536,7 +32686,7 @@ function EventRegistrationSSR({
32536
32686
  var event_registration_server_default = EventRegistrationSSR;
32537
32687
 
32538
32688
  // ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
32539
- import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
32689
+ import { jsx as jsx45, jsxs as jsxs32 } from "react/jsx-runtime";
32540
32690
  function joinClasses5(...parts) {
32541
32691
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
32542
32692
  }
@@ -32552,7 +32702,7 @@ function FeedbackMessage({
32552
32702
  }) {
32553
32703
  const resolvedLive = live ?? (role === "alert" ? "assertive" : "polite");
32554
32704
  const shouldWrapBody = Boolean(title || bodyClassName);
32555
- return /* @__PURE__ */ jsxs31(
32705
+ return /* @__PURE__ */ jsxs32(
32556
32706
  "div",
32557
32707
  {
32558
32708
  className,
@@ -32568,7 +32718,7 @@ function FeedbackMessage({
32568
32718
  }
32569
32719
 
32570
32720
  // ../blocks/src/system/runtime/nodes/form.server.tsx
32571
- import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
32721
+ import { jsx as jsx46, jsxs as jsxs33 } from "react/jsx-runtime";
32572
32722
  var FormNodeSSR = ({
32573
32723
  blockId,
32574
32724
  value,
@@ -32593,7 +32743,7 @@ var FormNodeSSR = ({
32593
32743
  const display = islandProps.render.display;
32594
32744
  const form2 = display.form;
32595
32745
  if (!form2) {
32596
- return /* @__PURE__ */ jsxs32("div", { ...getIslandRootProps("form", blockId), children: [
32746
+ return /* @__PURE__ */ jsxs33("div", { ...getIslandRootProps("form", blockId), children: [
32597
32747
  /* @__PURE__ */ jsx46(IslandPropsScript, { value: islandProps }),
32598
32748
  /* @__PURE__ */ jsx46(FeedbackMessage, { tone: "warning", className: clsx_default("fb-empty", className), role: "status", children: "Missing or unknown form." })
32599
32749
  ] });
@@ -32605,7 +32755,7 @@ var FormNodeSSR = ({
32605
32755
  const required = Boolean(field.required);
32606
32756
  const type = String(field.type ?? "text");
32607
32757
  if (type === "textarea") {
32608
- return /* @__PURE__ */ jsxs32("div", { className: "fb-field", children: [
32758
+ return /* @__PURE__ */ jsxs33("div", { className: "fb-field", children: [
32609
32759
  /* @__PURE__ */ jsx46("label", { htmlFor: inputId, className: "form-label", children: label }),
32610
32760
  /* @__PURE__ */ jsx46(
32611
32761
  "textarea",
@@ -32623,9 +32773,9 @@ var FormNodeSSR = ({
32623
32773
  if (type === "select") {
32624
32774
  const options = field.options ?? [];
32625
32775
  const multiple = Boolean(field.multiple);
32626
- return /* @__PURE__ */ jsxs32("div", { className: "fb-field", children: [
32776
+ return /* @__PURE__ */ jsxs33("div", { className: "fb-field", children: [
32627
32777
  /* @__PURE__ */ jsx46("label", { htmlFor: inputId, className: "form-label", children: label }),
32628
- /* @__PURE__ */ jsxs32("select", { id: inputId, name: field.id, multiple, required, className: "form-select", children: [
32778
+ /* @__PURE__ */ jsxs33("select", { id: inputId, name: field.id, multiple, required, className: "form-select", children: [
32629
32779
  !multiple && /* @__PURE__ */ jsx46("option", { value: "", children: "Select\u2026" }),
32630
32780
  options.map((opt) => /* @__PURE__ */ jsx46("option", { value: opt.value, children: opt.label }, opt.value))
32631
32781
  ] })
@@ -32633,9 +32783,9 @@ var FormNodeSSR = ({
32633
32783
  }
32634
32784
  if (type === "radio") {
32635
32785
  const options = field.options ?? [];
32636
- return /* @__PURE__ */ jsxs32("fieldset", { className: "fb-fieldset", children: [
32786
+ return /* @__PURE__ */ jsxs33("fieldset", { className: "fb-fieldset", children: [
32637
32787
  /* @__PURE__ */ jsx46("legend", { className: "form-label", children: label }),
32638
- options.map((opt) => /* @__PURE__ */ jsxs32("label", { className: "fb-inline form-label", children: [
32788
+ options.map((opt) => /* @__PURE__ */ jsxs33("label", { className: "fb-inline form-label", children: [
32639
32789
  /* @__PURE__ */ jsx46(
32640
32790
  "input",
32641
32791
  {
@@ -32651,7 +32801,7 @@ var FormNodeSSR = ({
32651
32801
  ] }, field.id);
32652
32802
  }
32653
32803
  if (type === "checkbox" || type === "consent") {
32654
- return /* @__PURE__ */ jsxs32("label", { className: "fb-inline form-label", children: [
32804
+ return /* @__PURE__ */ jsxs33("label", { className: "fb-inline form-label", children: [
32655
32805
  /* @__PURE__ */ jsx46("input", { type: "checkbox", name: field.id, required, className: "form-checkbox" }),
32656
32806
  /* @__PURE__ */ jsx46("span", { children: label })
32657
32807
  ] }, field.id);
@@ -32667,7 +32817,7 @@ var FormNodeSSR = ({
32667
32817
  if (typeof field.min === "number") extra.min = field.min;
32668
32818
  if (typeof field.max === "number") extra.max = field.max;
32669
32819
  }
32670
- return /* @__PURE__ */ jsxs32("div", { className: "fb-field", children: [
32820
+ return /* @__PURE__ */ jsxs33("div", { className: "fb-field", children: [
32671
32821
  /* @__PURE__ */ jsx46("label", { htmlFor: inputId, className: "form-label", children: label }),
32672
32822
  /* @__PURE__ */ jsx46(
32673
32823
  "input",
@@ -32683,9 +32833,9 @@ var FormNodeSSR = ({
32683
32833
  )
32684
32834
  ] }, field.id);
32685
32835
  };
32686
- return /* @__PURE__ */ jsxs32("div", { ...getIslandRootProps("form", blockId), children: [
32836
+ return /* @__PURE__ */ jsxs33("div", { ...getIslandRootProps("form", blockId), children: [
32687
32837
  /* @__PURE__ */ jsx46(IslandPropsScript, { value: islandProps }),
32688
- /* @__PURE__ */ jsxs32(
32838
+ /* @__PURE__ */ jsxs33(
32689
32839
  "form",
32690
32840
  {
32691
32841
  method: "POST",
@@ -32720,7 +32870,7 @@ var FormNodeSSR = ({
32720
32870
  };
32721
32871
 
32722
32872
  // ../blocks/src/system/runtime/nodes/newsletter-form.server.tsx
32723
- import { jsx as jsx47, jsxs as jsxs33 } from "react/jsx-runtime";
32873
+ import { jsx as jsx47, jsxs as jsxs34 } from "react/jsx-runtime";
32724
32874
  function NewsletterFormSSR({
32725
32875
  blockId,
32726
32876
  siteId,
@@ -32752,8 +32902,8 @@ function NewsletterFormSSR({
32752
32902
  const fields3 = display.fields;
32753
32903
  const renderField = (field) => {
32754
32904
  const inputId = `newsletter_${field.id}`;
32755
- return /* @__PURE__ */ jsxs33("div", { className: "fb-field newsletter-field", children: [
32756
- /* @__PURE__ */ jsxs33("label", { htmlFor: inputId, className: "form-label", children: [
32905
+ return /* @__PURE__ */ jsxs34("div", { className: "fb-field newsletter-field", children: [
32906
+ /* @__PURE__ */ jsxs34("label", { htmlFor: inputId, className: "form-label", children: [
32757
32907
  field.label,
32758
32908
  field.required && /* @__PURE__ */ jsx47("span", { className: "newsletter-required", "aria-hidden": "true", children: "*" })
32759
32909
  ] }),
@@ -32771,14 +32921,14 @@ function NewsletterFormSSR({
32771
32921
  )
32772
32922
  ] }, field.id);
32773
32923
  };
32774
- return /* @__PURE__ */ jsxs33(
32924
+ return /* @__PURE__ */ jsxs34(
32775
32925
  "div",
32776
32926
  {
32777
32927
  ...getIslandRootProps("newsletter-form", blockId),
32778
32928
  className: clsx_default("newsletter-form-ssr", className),
32779
32929
  children: [
32780
32930
  /* @__PURE__ */ jsx47(IslandPropsScript, { value: islandProps }),
32781
- /* @__PURE__ */ jsxs33("form", { method: "POST", className: "newsletter-form fb-form", children: [
32931
+ /* @__PURE__ */ jsxs34("form", { method: "POST", className: "newsletter-form fb-form", children: [
32782
32932
  /* @__PURE__ */ jsx47(
32783
32933
  "input",
32784
32934
  {
@@ -32790,7 +32940,7 @@ function NewsletterFormSSR({
32790
32940
  "aria-hidden": "true"
32791
32941
  }
32792
32942
  ),
32793
- /* @__PURE__ */ jsxs33("div", { className: "newsletter-form-fields", children: [
32943
+ /* @__PURE__ */ jsxs34("div", { className: "newsletter-form-fields", children: [
32794
32944
  fields3.map(renderField),
32795
32945
  /* @__PURE__ */ jsx47("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx47(
32796
32946
  "button",
@@ -32810,7 +32960,7 @@ function NewsletterFormSSR({
32810
32960
  var newsletter_form_server_default = NewsletterFormSSR;
32811
32961
 
32812
32962
  // ../blocks/src/system/runtime/nodes/product-detail.server.tsx
32813
- import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
32963
+ import { jsx as jsx48, jsxs as jsxs35 } from "react/jsx-runtime";
32814
32964
  function ProductDetailSSR({
32815
32965
  blockId,
32816
32966
  siteId,
@@ -32825,7 +32975,7 @@ function ProductDetailSSR({
32825
32975
  stage,
32826
32976
  ...rest
32827
32977
  });
32828
- return /* @__PURE__ */ jsxs34(
32978
+ return /* @__PURE__ */ jsxs35(
32829
32979
  "div",
32830
32980
  {
32831
32981
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -32845,7 +32995,7 @@ function ProductDetailSSR({
32845
32995
  var product_detail_server_default = ProductDetailSSR;
32846
32996
 
32847
32997
  // ../blocks/src/system/runtime/nodes/product-list.server.tsx
32848
- import { jsx as jsx49, jsxs as jsxs35 } from "react/jsx-runtime";
32998
+ import { jsx as jsx49, jsxs as jsxs36 } from "react/jsx-runtime";
32849
32999
  function ProductListSSR({
32850
33000
  blockId,
32851
33001
  siteId,
@@ -32860,7 +33010,7 @@ function ProductListSSR({
32860
33010
  stage,
32861
33011
  ...rest
32862
33012
  });
32863
- return /* @__PURE__ */ jsxs35(
33013
+ return /* @__PURE__ */ jsxs36(
32864
33014
  "div",
32865
33015
  {
32866
33016
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -32880,7 +33030,7 @@ function ProductListSSR({
32880
33030
  var product_list_server_default = ProductListSSR;
32881
33031
 
32882
33032
  // ../blocks/src/system/runtime/nodes/shop.server.tsx
32883
- import { jsx as jsx50, jsxs as jsxs36 } from "react/jsx-runtime";
33033
+ import { jsx as jsx50, jsxs as jsxs37 } from "react/jsx-runtime";
32884
33034
  function ShopSSR({
32885
33035
  blockId,
32886
33036
  siteId,
@@ -32897,7 +33047,7 @@ function ShopSSR({
32897
33047
  ...rest
32898
33048
  });
32899
33049
  const render = islandProps.render;
32900
- return /* @__PURE__ */ jsxs36(
33050
+ return /* @__PURE__ */ jsxs37(
32901
33051
  "div",
32902
33052
  {
32903
33053
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -33118,6 +33268,10 @@ function getAbsoluteSegments(fromPath, context) {
33118
33268
  if (scoped?.basePathSegments && scoped.basePathSegments.length > 0) {
33119
33269
  return [...scoped.basePathSegments, ...rest];
33120
33270
  }
33271
+ const hasContentScope = context.scopes.some((entry) => entry.name === "content");
33272
+ if (hasContentScope && !(first in context.viewModel)) {
33273
+ return ["content", ...segments];
33274
+ }
33121
33275
  return void 0;
33122
33276
  }
33123
33277
  function readFromSource(source, segments) {
@@ -33766,7 +33920,7 @@ function makeDefaultBlockComponent(args) {
33766
33920
  pathBase,
33767
33921
  blockId,
33768
33922
  blockKind,
33769
- blockContent: content,
33923
+ blockContent: mergedContent,
33770
33924
  blockBindings,
33771
33925
  editableRouteMetadataFieldIds,
33772
33926
  fragmentRegistry: fragmentRegistry2
@@ -34802,6 +34956,19 @@ function getNavLinkPreset(presetId) {
34802
34956
  }
34803
34957
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
34804
34958
 
34959
+ // ../theme-core/src/header/navDropdownSizing.ts
34960
+ var NAV_DROPDOWN_MIN_WIDTH_REM = 12;
34961
+ var NAV_DROPDOWN_MAX_WIDTH_REM = 22;
34962
+ var NAV_DROPDOWN_VIEWPORT_GUTTER_REM = 1;
34963
+ var NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
34964
+ var NAV_DROPDOWN_MAX_WIDTH_CSS = `min(${NAV_DROPDOWN_MAX_WIDTH_REM}rem, calc(100vw - ${NAV_DROPDOWN_VIEWPORT_GUTTER_REM * 2}rem))`;
34965
+ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
34966
+ `min-width: ${NAV_DROPDOWN_MIN_WIDTH_REM}rem;`,
34967
+ `width: max-content;`,
34968
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
34969
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
34970
+ ];
34971
+
34805
34972
  // ../theme-core/src/header/generateHeaderCss.ts
34806
34973
  var HEADER_BLUR = "blur(12px)";
34807
34974
  var FLOATING_BLUR = "blur(16px)";
@@ -35076,6 +35243,7 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
35076
35243
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
35077
35244
  const rules = [];
35078
35245
  const dropdownStyle = header.dropdownStyle;
35246
+ rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
35079
35247
  const bgToken = dropdownStyle?.background ?? "surface";
35080
35248
  rules.push(`background-color: ${tokens.getColor(bgToken)};`);
35081
35249
  const textToken = dropdownStyle?.textColor ?? "text";
@@ -45143,6 +45311,17 @@ var containerResponsiveThemeCss = `/*
45143
45311
  * =============================================================================
45144
45312
  */
45145
45313
 
45314
+ :where(.theme-scope) .nav-dropdown-menu {
45315
+ /*
45316
+ * Keep these rails in sync with header/navDropdownSizing.ts.
45317
+ * The JS placement gutter is 16px, matching the 1rem per-side gutter in calc(100vw - 2rem).
45318
+ */
45319
+ min-width: 12rem;
45320
+ width: max-content;
45321
+ max-width: min(22rem, calc(100vw - 2rem));
45322
+ transform: translateX(var(--nav-dropdown-shift-x, 0px));
45323
+ }
45324
+
45146
45325
  :where(.theme-scope) .nav-dropdown:hover > .nav-dropdown-menu,
45147
45326
  :where(.theme-scope) .nav-dropdown:focus-within > .nav-dropdown-menu,
45148
45327
  :where(.theme-scope) .nav-dropdown .nav-dropdown-trigger[aria-expanded="true"] + .nav-dropdown-menu {
@@ -46613,6 +46792,11 @@ var containerResponsiveThemeCss = `/*
46613
46792
  * Dense row layout for event-calendar compact list mode
46614
46793
  * ============================================================================= */
46615
46794
 
46795
+ :where(.theme-scope) .event-listing-compact-container {
46796
+ width: min(100%, 56rem);
46797
+ margin-inline: auto;
46798
+ }
46799
+
46616
46800
  :where(.theme-scope) .event-compact-row {
46617
46801
  display: flex;
46618
46802
  align-items: center;
@@ -46738,7 +46922,7 @@ var containerResponsiveThemeCss = `/*
46738
46922
  }`;
46739
46923
 
46740
46924
  // ../theme-core/src/ThemeScopeCore.tsx
46741
- import { jsx as jsx52, jsxs as jsxs37 } from "react/jsx-runtime";
46925
+ import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
46742
46926
  function ThemeScopeCore({
46743
46927
  cssVars,
46744
46928
  buttonCss,
@@ -46770,7 +46954,7 @@ function ThemeScopeCore({
46770
46954
  containerType: "inline-size",
46771
46955
  containerName: responsiveScope.containerName
46772
46956
  } : cssVars;
46773
- return /* @__PURE__ */ jsxs37(
46957
+ return /* @__PURE__ */ jsxs38(
46774
46958
  "div",
46775
46959
  {
46776
46960
  className: className ? `theme-scope ${className}` : "theme-scope",
@@ -46988,10 +47172,10 @@ function resolveFooterRenderPlan(params) {
46988
47172
 
46989
47173
  // ../theme-core/src/ThemeFontLoader.tsx
46990
47174
  import * as React7 from "react";
46991
- import { Fragment as Fragment7, jsx as jsx54, jsxs as jsxs38 } from "react/jsx-runtime";
47175
+ import { Fragment as Fragment7, jsx as jsx54, jsxs as jsxs39 } from "react/jsx-runtime";
46992
47176
 
46993
47177
  // ../theme-core/src/siteChrome.tsx
46994
- import { Fragment as Fragment8, jsx as jsx55, jsxs as jsxs39 } from "react/jsx-runtime";
47178
+ import { Fragment as Fragment8, jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
46995
47179
 
46996
47180
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
46997
47181
  import { z as z64 } from "zod";
@@ -47025,10 +47209,10 @@ var themeBridgeConfigSchema = z64.object({
47025
47209
  }).passthrough();
47026
47210
 
47027
47211
  // ../theme-core/src/mock-themes/components/swatch.tsx
47028
- import { jsx as jsx56, jsxs as jsxs40 } from "react/jsx-runtime";
47212
+ import { jsx as jsx56, jsxs as jsxs41 } from "react/jsx-runtime";
47029
47213
 
47030
47214
  // ../theme-core/src/mock-themes/components/PaletteCard.tsx
47031
- import { jsx as jsx57, jsxs as jsxs41 } from "react/jsx-runtime";
47215
+ import { jsx as jsx57, jsxs as jsxs42 } from "react/jsx-runtime";
47032
47216
 
47033
47217
  // src/rendering/blocks-theme-runtime.ts
47034
47218
  var AXES_TONE_OPTIONS = ["minimal", "classic", "bold"];
@@ -47632,7 +47816,7 @@ function buildLogo(logo, fallbackAlt) {
47632
47816
  }
47633
47817
 
47634
47818
  // src/rendering/components/Layout.tsx
47635
- import { Fragment as Fragment9, jsx as jsx60, jsxs as jsxs42 } from "react/jsx-runtime";
47819
+ import { Fragment as Fragment9, jsx as jsx60, jsxs as jsxs43 } from "react/jsx-runtime";
47636
47820
  async function Layout({
47637
47821
  siteData: providedSiteData,
47638
47822
  client,
@@ -47767,14 +47951,14 @@ async function Layout({
47767
47951
  themeConfig: blocksTheme,
47768
47952
  viewModelOverrides
47769
47953
  }) : null;
47770
- footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs42(Fragment9, { children: [
47954
+ footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs43(Fragment9, { children: [
47771
47955
  footerBlocksElement,
47772
47956
  defaultFooterElement
47773
47957
  ] }) : footerPlan.mode === "blocks" ? footerBlocksElement : footerPlan.mode === "none" ? null : defaultFooterElement;
47774
47958
  } else if (typeof footer === "function") {
47775
47959
  footerElement = footer(footerData);
47776
47960
  }
47777
- const content = /* @__PURE__ */ jsxs42(Fragment9, { children: [
47961
+ const content = /* @__PURE__ */ jsxs43(Fragment9, { children: [
47778
47962
  headerElement,
47779
47963
  children,
47780
47964
  footerElement
@@ -49364,6 +49548,18 @@ var TAG_TEMPLATES = {
49364
49548
  siteForms: "riverbank:site:{siteId}:forms",
49365
49549
  formById: "riverbank:form:{formId}",
49366
49550
  formSubmissionsBySlug: "riverbank:form-submissions:{slug}",
49551
+ // Public data loaders
49552
+ publicEvents: "riverbank:site:{siteId}:public-events",
49553
+ publicEventFilters: "riverbank:site:{siteId}:public-event-filters",
49554
+ publicCourses: "riverbank:site:{siteId}:public-courses",
49555
+ publicTeamMembers: "riverbank:site:{siteId}:public-team-members",
49556
+ publicProducts: "riverbank:site:{siteId}:public-products",
49557
+ publicPasses: "riverbank:site:{siteId}:public-passes",
49558
+ publicMemberships: "riverbank:site:{siteId}:public-memberships",
49559
+ publicGifting: "riverbank:site:{siteId}:public-gifting",
49560
+ publicShop: "riverbank:site:{siteId}:public-shop",
49561
+ publicCheckout: "riverbank:site:{siteId}:public-checkout",
49562
+ publicBookingServices: "riverbank:site:{siteId}:public-booking-services",
49367
49563
  // Navigation
49368
49564
  siteNavigation: "riverbank:site:{siteId}:navigation",
49369
49565
  navigationMenuById: "riverbank:navigation-menu:{menuId}",
@@ -53050,7 +53246,7 @@ var ENDPOINT_DEFINITIONS = {
53050
53246
  path: "/public/sites/{siteId}/events",
53051
53247
  method: "GET",
53052
53248
  revalidate: 60,
53053
- tags: ["public-events-{siteId}"],
53249
+ tags: [TAG_TEMPLATES.publicEvents],
53054
53250
  auth: "public",
53055
53251
  responseKind: "json"
53056
53252
  },
@@ -53059,7 +53255,7 @@ var ENDPOINT_DEFINITIONS = {
53059
53255
  path: "/public/sites/{siteId}/events/filters",
53060
53256
  method: "GET",
53061
53257
  revalidate: 60,
53062
- tags: ["public-event-filters-{siteId}"],
53258
+ tags: [TAG_TEMPLATES.publicEventFilters],
53063
53259
  auth: "public",
53064
53260
  responseKind: "json"
53065
53261
  },
@@ -53068,7 +53264,7 @@ var ENDPOINT_DEFINITIONS = {
53068
53264
  path: "/public/sites/{siteId}/courses",
53069
53265
  method: "GET",
53070
53266
  revalidate: 60,
53071
- tags: ["public-courses-{siteId}"],
53267
+ tags: [TAG_TEMPLATES.publicCourses],
53072
53268
  auth: "public",
53073
53269
  responseKind: "json"
53074
53270
  },
@@ -53076,7 +53272,7 @@ var ENDPOINT_DEFINITIONS = {
53076
53272
  path: "/public/sites/{siteId}/team-members",
53077
53273
  method: "GET",
53078
53274
  revalidate: 60,
53079
- tags: ["public-team-members-{siteId}"],
53275
+ tags: [TAG_TEMPLATES.publicTeamMembers],
53080
53276
  errors: [],
53081
53277
  auth: "public",
53082
53278
  responseKind: "json"
@@ -53085,21 +53281,21 @@ var ENDPOINT_DEFINITIONS = {
53085
53281
  path: "/public/sites/{siteId}/courses/{courseId}",
53086
53282
  method: "GET",
53087
53283
  revalidate: 60,
53088
- tags: ["public-courses-{siteId}"],
53284
+ tags: [TAG_TEMPLATES.publicCourses],
53089
53285
  auth: "public",
53090
53286
  responseKind: "json"
53091
53287
  },
53092
53288
  enrollInCourse: {
53093
53289
  path: "/public/sites/{siteId}/courses/enroll",
53094
53290
  method: "POST",
53095
- tags: ["public-courses-{siteId}", "course-enrollment"],
53291
+ tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
53096
53292
  auth: "public",
53097
53293
  responseKind: "json"
53098
53294
  },
53099
53295
  checkCourseEligibility: {
53100
53296
  path: "/public/sites/{siteId}/courses/check-eligibility",
53101
53297
  method: "POST",
53102
- tags: ["public-courses-{siteId}", "course-enrollment"],
53298
+ tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
53103
53299
  auth: "public",
53104
53300
  responseKind: "json"
53105
53301
  },
@@ -53107,8 +53303,8 @@ var ENDPOINT_DEFINITIONS = {
53107
53303
  path: "/public/sites/{siteId}/waitlists/claim/resolve",
53108
53304
  method: "POST",
53109
53305
  tags: [
53110
- "public-courses-{siteId}",
53111
- "public-events-{siteId}",
53306
+ TAG_TEMPLATES.publicCourses,
53307
+ TAG_TEMPLATES.publicEvents,
53112
53308
  "waitlist-claims"
53113
53309
  ],
53114
53310
  auth: "public",
@@ -53123,7 +53319,7 @@ var ENDPOINT_DEFINITIONS = {
53123
53319
  createCourseCheckout: {
53124
53320
  path: "/public/sites/{siteId}/courses/checkout",
53125
53321
  method: "POST",
53126
- tags: ["public-courses-{siteId}", "course-checkout"],
53322
+ tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
53127
53323
  auth: "public",
53128
53324
  responseKind: "json",
53129
53325
  errors: [
@@ -53137,7 +53333,7 @@ var ENDPOINT_DEFINITIONS = {
53137
53333
  getCourseRegistrationStatus: {
53138
53334
  path: "/public/sites/{siteId}/courses/registration-status",
53139
53335
  method: "GET",
53140
- tags: ["public-courses-{siteId}", "course-checkout"],
53336
+ tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
53141
53337
  auth: "public",
53142
53338
  responseKind: "json"
53143
53339
  },
@@ -53146,7 +53342,7 @@ var ENDPOINT_DEFINITIONS = {
53146
53342
  path: "/public/sites/{siteId}/bookings/products/passes",
53147
53343
  method: "GET",
53148
53344
  revalidate: 300,
53149
- tags: ["public-passes-{siteId}"],
53345
+ tags: [TAG_TEMPLATES.publicPasses],
53150
53346
  auth: "public",
53151
53347
  responseKind: "json"
53152
53348
  },
@@ -53155,7 +53351,7 @@ var ENDPOINT_DEFINITIONS = {
53155
53351
  path: "/public/sites/{siteId}/bookings/products/memberships",
53156
53352
  method: "GET",
53157
53353
  revalidate: 300,
53158
- tags: ["public-memberships-{siteId}"],
53354
+ tags: [TAG_TEMPLATES.publicMemberships],
53159
53355
  auth: "public",
53160
53356
  responseKind: "json"
53161
53357
  },
@@ -53164,7 +53360,7 @@ var ENDPOINT_DEFINITIONS = {
53164
53360
  path: "/public/sites/{siteId}/products",
53165
53361
  method: "GET",
53166
53362
  revalidate: 300,
53167
- tags: ["public-products-{siteId}"],
53363
+ tags: [TAG_TEMPLATES.publicProducts],
53168
53364
  errors: [],
53169
53365
  auth: "public",
53170
53366
  responseKind: "json"
@@ -53173,7 +53369,7 @@ var ENDPOINT_DEFINITIONS = {
53173
53369
  path: "/public/sites/{siteId}/gifting/offers",
53174
53370
  method: "GET",
53175
53371
  revalidate: 300,
53176
- tags: ["public-gifting-{siteId}"],
53372
+ tags: [TAG_TEMPLATES.publicGifting],
53177
53373
  errors: [],
53178
53374
  auth: "public",
53179
53375
  responseKind: "json"
@@ -53181,7 +53377,7 @@ var ENDPOINT_DEFINITIONS = {
53181
53377
  createPublicGiftingCheckout: {
53182
53378
  path: "/public/sites/{siteId}/gifting/checkout",
53183
53379
  method: "POST",
53184
- tags: ["public-gifting-{siteId}"],
53380
+ tags: [TAG_TEMPLATES.publicGifting],
53185
53381
  errors: [],
53186
53382
  auth: "public",
53187
53383
  responseKind: "json"
@@ -53189,7 +53385,7 @@ var ENDPOINT_DEFINITIONS = {
53189
53385
  claimGiftCardPublic: {
53190
53386
  path: "/public/sites/{siteId}/gifting/claim",
53191
53387
  method: "POST",
53192
- tags: ["public-gifting-{siteId}"],
53388
+ tags: [TAG_TEMPLATES.publicGifting],
53193
53389
  errors: [],
53194
53390
  auth: "public",
53195
53391
  responseKind: "json"
@@ -53197,14 +53393,14 @@ var ENDPOINT_DEFINITIONS = {
53197
53393
  createShopCheckout: {
53198
53394
  path: "/public/sites/{siteId}/bookings/checkout",
53199
53395
  method: "POST",
53200
- tags: ["public-shop-{siteId}", "shop-checkout"],
53396
+ tags: [TAG_TEMPLATES.publicShop, "shop-checkout"],
53201
53397
  auth: "public",
53202
53398
  responseKind: "json"
53203
53399
  },
53204
53400
  createUnifiedCheckout: {
53205
53401
  path: "/public/sites/{siteId}/checkout",
53206
53402
  method: "POST",
53207
- tags: ["public-checkout-{siteId}"],
53403
+ tags: [TAG_TEMPLATES.publicCheckout],
53208
53404
  auth: "public",
53209
53405
  responseKind: "json",
53210
53406
  errors: [
@@ -53243,7 +53439,7 @@ var ENDPOINT_DEFINITIONS = {
53243
53439
  path: "/public/sites/{siteId}/events/occurrences/resolve",
53244
53440
  method: "GET",
53245
53441
  revalidate: 60,
53246
- tags: ["public-events-{siteId}", "event-occurrence"],
53442
+ tags: [TAG_TEMPLATES.publicEvents, "event-occurrence"],
53247
53443
  auth: "public",
53248
53444
  responseKind: "json"
53249
53445
  },
@@ -53251,7 +53447,7 @@ var ENDPOINT_DEFINITIONS = {
53251
53447
  registerForEvent: {
53252
53448
  path: "/public/sites/{siteId}/events/register",
53253
53449
  method: "POST",
53254
- tags: ["public-events-{siteId}", "event-registration"],
53450
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration"],
53255
53451
  auth: "public",
53256
53452
  responseKind: "json"
53257
53453
  },
@@ -53259,7 +53455,7 @@ var ENDPOINT_DEFINITIONS = {
53259
53455
  createPublicEventCheckout: {
53260
53456
  path: "/public/sites/{siteId}/events/checkout",
53261
53457
  method: "POST",
53262
- tags: ["public-events-{siteId}", "event-checkout"],
53458
+ tags: [TAG_TEMPLATES.publicEvents, "event-checkout"],
53263
53459
  auth: "public",
53264
53460
  responseKind: "json"
53265
53461
  },
@@ -53267,7 +53463,7 @@ var ENDPOINT_DEFINITIONS = {
53267
53463
  checkPublicEventEligibility: {
53268
53464
  path: "/public/sites/{siteId}/events/check-eligibility",
53269
53465
  method: "POST",
53270
- tags: ["public-events-{siteId}", "event-eligibility"],
53466
+ tags: [TAG_TEMPLATES.publicEvents, "event-eligibility"],
53271
53467
  auth: "public",
53272
53468
  responseKind: "json"
53273
53469
  },
@@ -53275,7 +53471,7 @@ var ENDPOINT_DEFINITIONS = {
53275
53471
  getPublicEventRegistrationStatus: {
53276
53472
  path: "/public/sites/{siteId}/events/registration-status",
53277
53473
  method: "GET",
53278
- tags: ["public-events-{siteId}", "event-registration"],
53474
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration"],
53279
53475
  auth: "public",
53280
53476
  responseKind: "json"
53281
53477
  },
@@ -53283,7 +53479,7 @@ var ENDPOINT_DEFINITIONS = {
53283
53479
  getPublicEventTicketQrSvg: {
53284
53480
  path: "/public/sites/{siteId}/events/tickets/qr",
53285
53481
  method: "GET",
53286
- tags: ["public-events-{siteId}", "event-ticket-qr"],
53482
+ tags: [TAG_TEMPLATES.publicEvents, "event-ticket-qr"],
53287
53483
  auth: "public",
53288
53484
  responseKind: "text"
53289
53485
  },
@@ -56861,9 +57057,9 @@ async function prefetchBlockData2(page, context, client, options) {
56861
57057
  }
56862
57058
 
56863
57059
  // src/rendering/components/Block.shared.tsx
56864
- import { jsx as jsx61, jsxs as jsxs43 } from "react/jsx-runtime";
57060
+ import { jsx as jsx61, jsxs as jsxs44 } from "react/jsx-runtime";
56865
57061
  function renderUnknownBlock(blockKind) {
56866
- return /* @__PURE__ */ jsx61("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs43("p", { className: "text-red-800 font-semibold", children: [
57062
+ return /* @__PURE__ */ jsx61("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs44("p", { className: "text-red-800 font-semibold", children: [
56867
57063
  "Unknown block type: ",
56868
57064
  blockKind
56869
57065
  ] }) });
@@ -57010,10 +57206,95 @@ import { jsx as jsx62 } from "react/jsx-runtime";
57010
57206
  function Block(props2) {
57011
57207
  return /* @__PURE__ */ jsx62(BlockContent, { ...props2 });
57012
57208
  }
57209
+
57210
+ // src/rendering/overrides.ts
57211
+ var lazyBlockOverrideSymbol = /* @__PURE__ */ Symbol.for("riverbankcms.sdk.lazyBlockOverride");
57212
+ function defineLazyBlockOverride(load) {
57213
+ return {
57214
+ [lazyBlockOverrideSymbol]: true,
57215
+ load
57216
+ };
57217
+ }
57218
+
57219
+ // src/rendering/overrideResolution.ts
57220
+ function isRecord6(value) {
57221
+ return typeof value === "object" && value !== null;
57222
+ }
57223
+ function isBlockOutlineLike(value) {
57224
+ const id = value.id;
57225
+ return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord6(value.content) || isRecord6(value.draftContent) || isRecord6(value.bindings));
57226
+ }
57227
+ function collectBlockKindsFromValue(value, usedKinds, seen) {
57228
+ if (!isRecord6(value)) return;
57229
+ if (seen.has(value)) return;
57230
+ seen.add(value);
57231
+ if (isBlockOutlineLike(value)) {
57232
+ usedKinds.add(value.kind);
57233
+ }
57234
+ for (const child of Object.values(value)) {
57235
+ if (Array.isArray(child)) {
57236
+ for (const item of child) {
57237
+ collectBlockKindsFromValue(item, usedKinds, seen);
57238
+ }
57239
+ continue;
57240
+ }
57241
+ collectBlockKindsFromValue(child, usedKinds, seen);
57242
+ }
57243
+ }
57244
+ function collectUsedBlockKinds(page) {
57245
+ const usedKinds = /* @__PURE__ */ new Set();
57246
+ const seen = /* @__PURE__ */ new WeakSet();
57247
+ for (const block of page?.blocks ?? []) {
57248
+ collectBlockKindsFromValue(block, usedKinds, seen);
57249
+ }
57250
+ return usedKinds;
57251
+ }
57252
+ function shortBlockKind(blockKind) {
57253
+ return blockKind.replace(/^block\./, "");
57254
+ }
57255
+ function selectOverrideKeysForUsedKinds(usedKinds, entries) {
57256
+ const availableKeys = new Set(entries.map(([key]) => key));
57257
+ const selectedKeys = /* @__PURE__ */ new Set();
57258
+ for (const blockKind of usedKinds) {
57259
+ if (availableKeys.has(blockKind)) {
57260
+ selectedKeys.add(blockKind);
57261
+ continue;
57262
+ }
57263
+ const shortKind = shortBlockKind(blockKind);
57264
+ if (availableKeys.has(shortKind)) {
57265
+ selectedKeys.add(shortKind);
57266
+ }
57267
+ }
57268
+ return selectedKeys;
57269
+ }
57270
+ function isLazyRegistration(registration) {
57271
+ return isRecord6(registration) && registration[lazyBlockOverrideSymbol] === true;
57272
+ }
57273
+ async function resolveOverrideComponent(registration) {
57274
+ if (isLazyRegistration(registration)) {
57275
+ return registration.load();
57276
+ }
57277
+ return registration;
57278
+ }
57279
+ async function resolveBlockOverridesForPage(registrations, page) {
57280
+ if (!registrations) return void 0;
57281
+ const entries = Object.entries(registrations);
57282
+ if (entries.length === 0) return void 0;
57283
+ const selectedKeys = selectOverrideKeysForUsedKinds(collectUsedBlockKinds(page), entries);
57284
+ if (selectedKeys.size === 0) return void 0;
57285
+ const resolved = {};
57286
+ for (const [key, registration] of entries) {
57287
+ if (!selectedKeys.has(key)) continue;
57288
+ resolved[key] = await resolveOverrideComponent(registration);
57289
+ }
57290
+ return resolved;
57291
+ }
57013
57292
  export {
57014
57293
  Block,
57015
57294
  Layout,
57016
- Page
57295
+ Page,
57296
+ defineLazyBlockOverride,
57297
+ resolveBlockOverridesForPage
57017
57298
  };
57018
57299
  /*! Bundled license information:
57019
57300