@riverbankcms/sdk 0.74.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 (113) hide show
  1. package/dist/{PreviewEditorSidebar-5XL7M3OM.mjs → PreviewEditorSidebar-U2IHCBYN.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-ZDFRDJID.mjs → PreviewEditorUI-ZGH2RQNP.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-MTUGBTLQ.mjs +8 -0
  4. package/dist/_dts/api/src/cache-tags.d.ts +22 -0
  5. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  6. package/dist/_dts/api/src/endpoints.d.ts +24 -24
  7. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +2 -1
  8. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +4 -1
  9. package/dist/_dts/blocks/src/client/booking-form.d.ts +2 -0
  10. package/dist/_dts/blocks/src/client/carousel.d.ts +1 -0
  11. package/dist/_dts/blocks/src/client/course-registration.d.ts +2 -0
  12. package/dist/_dts/blocks/src/client/events.d.ts +4 -0
  13. package/dist/_dts/blocks/src/client/form.d.ts +2 -0
  14. package/dist/_dts/blocks/src/client/header.d.ts +1 -0
  15. package/dist/_dts/blocks/src/client/location-map.d.ts +1 -0
  16. package/dist/_dts/blocks/src/client/newsletter-form.d.ts +2 -0
  17. package/dist/_dts/blocks/src/client/shop.d.ts +6 -0
  18. package/dist/_dts/blocks/src/lib/video.d.ts +2 -0
  19. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +21 -1
  20. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +1 -0
  21. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -2
  22. package/dist/_dts/blocks/src/system/runtime/nodes/events/index.d.ts +3 -0
  23. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +1 -0
  24. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +1 -0
  25. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +5 -0
  26. package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +12 -2
  27. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  28. package/dist/_dts/sdk/src/rendering/islands/deferredVideoEmbeds.d.ts +2 -0
  29. package/dist/_dts/sdk/src/rendering/server.d.ts +3 -0
  30. package/dist/_dts/sdk/src/version.d.ts +1 -1
  31. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  32. package/dist/{chunk-YY7K3QD2.mjs → chunk-BGMNDF6T.mjs} +7 -7
  33. package/dist/{chunk-2MIWNFJM.mjs → chunk-GFE74WRD.mjs} +309 -84
  34. package/dist/{chunk-CEQBBLMJ.mjs → chunk-RWXQBRQZ.mjs} +1 -1
  35. package/dist/{chunk-7RX72SK2.mjs → chunk-VX7B5VAC.mjs} +36 -25
  36. package/dist/{chunk-YRJKZEQ3.mjs → chunk-Z7JLNTJR.mjs} +1 -1
  37. package/dist/{chunk-CBD47MTM.mjs → chunk-ZSHFGFUG.mjs} +2 -2
  38. package/dist/cli/index.mjs +3395 -3753
  39. package/dist/client/{accordion-ZZVXWV3N.mjs → accordion-T2UD2ZTH.mjs} +1 -1
  40. package/dist/client/bookingForm-GUP75FKN.mjs +3022 -0
  41. package/dist/client/bookings.mjs +19 -10
  42. package/dist/client/{carousel-25WK2H7G.mjs → carousel-2NQA6V57.mjs} +3 -2
  43. package/dist/client/cart-5TFIAFDS.mjs +18 -0
  44. package/dist/client/checkout-TP4WAHZE.mjs +18 -0
  45. package/dist/client/chunk-2PHQZ666.mjs +383 -0
  46. package/dist/client/chunk-3DCJ45Z2.mjs +36 -0
  47. package/dist/client/chunk-3PEDD5KJ.mjs +146 -0
  48. package/dist/client/chunk-CY2ZTSE5.mjs +204 -0
  49. package/dist/client/chunk-F7LHOKEH.mjs +146 -0
  50. package/dist/client/{chunk-6VGXRE34.mjs → chunk-FU2QRZMX.mjs} +6 -6
  51. package/dist/client/chunk-I2MMZO53.mjs +6 -0
  52. package/dist/client/chunk-II7O4XN3.mjs +2206 -0
  53. package/dist/client/chunk-M3L3KYYR.mjs +1181 -0
  54. package/dist/client/chunk-NWOUL6JY.mjs +1378 -0
  55. package/dist/client/chunk-OJPZEZU2.mjs +31 -0
  56. package/dist/client/chunk-RTZ3JKKX.mjs +178 -0
  57. package/dist/client/chunk-TQ5MSPDX.mjs +74 -0
  58. package/dist/client/chunk-VUAOE3AG.mjs +5592 -0
  59. package/dist/client/chunk-WJXXNDSE.mjs +245 -0
  60. package/dist/client/chunk-YLMKMCSJ.mjs +86 -0
  61. package/dist/client/chunk-ZLMS67RR.mjs +106 -0
  62. package/dist/client/client.mjs +51626 -52074
  63. package/dist/client/courseRegistration-5DPU6PDY.mjs +1737 -0
  64. package/dist/client/{eventCalendar-X6GIPYFM.mjs → eventCalendar-F3GZGTEF.mjs} +13 -2
  65. package/dist/client/{eventCombined-EZUOPM3G.mjs → eventCombined-BQOB6QMY.mjs} +13 -2
  66. package/dist/client/eventDetails-PEM2EJWE.mjs +25 -0
  67. package/dist/client/{eventListing-HEFGAETC.mjs → eventListing-YMIQPVME.mjs} +13 -2
  68. package/dist/client/{eventRegistration-3LCP2V3P.mjs → eventRegistration-4I6ZNDUF.mjs} +13 -2
  69. package/dist/client/form-ZJVAYZ6G.mjs +300 -0
  70. package/dist/client/headerSection-TOT5MGTF.mjs +729 -0
  71. package/dist/client/hooks.mjs +49 -33
  72. package/dist/client/locationMap-J66NZREU.mjs +227 -0
  73. package/dist/client/newsletterForm-ET2XUMRO.mjs +208 -0
  74. package/dist/client/productDetail-C2XIH7C5.mjs +18 -0
  75. package/dist/client/productList-T2AZLFTP.mjs +18 -0
  76. package/dist/client/rendering/client.mjs +11763 -12445
  77. package/dist/client/rendering/islands.mjs +98 -21
  78. package/dist/client/rendering.mjs +46778 -47229
  79. package/dist/client/shop-UZ6IUZXD.mjs +20 -0
  80. package/dist/preview-next/before-render.mjs +37 -25
  81. package/dist/preview-next/client/runtime.mjs +5 -5
  82. package/dist/preview-next/middleware.mjs +37 -25
  83. package/dist/{sdk-runtime-OHNONZ5U.mjs → sdk-runtime-JCUQM63Y.mjs} +6 -6
  84. package/dist/server/components.mjs +409 -266
  85. package/dist/server/config-validation.mjs +49 -33
  86. package/dist/server/config.mjs +49 -33
  87. package/dist/server/data.mjs +49 -33
  88. package/dist/server/index.mjs +45 -33
  89. package/dist/server/next.mjs +405 -262
  90. package/dist/server/page-converter.mjs +12 -8
  91. package/dist/server/prebuild.mjs +1 -1
  92. package/dist/server/rendering/server.mjs +493 -265
  93. package/dist/server/rendering.mjs +411 -268
  94. package/dist/server/routing.mjs +49 -33
  95. package/dist/server/server.mjs +50 -34
  96. package/dist/server/theme-bridge.mjs +5 -0
  97. package/dist/styles/index.css +5 -0
  98. package/package.json +2 -1
  99. package/dist/SdkPreviewModeRuntime-CRYNDSPL.mjs +0 -8
  100. package/dist/client/bookingForm-4X77HKDS.mjs +0 -34
  101. package/dist/client/cart-JWD2VRFU.mjs +0 -11
  102. package/dist/client/checkout-V7KYGWL7.mjs +0 -11
  103. package/dist/client/chunk-5IYGMTUE.mjs +0 -18614
  104. package/dist/client/chunk-RKCFVIMS.mjs +0 -26
  105. package/dist/client/courseRegistration-O6ZPK4YT.mjs +0 -29
  106. package/dist/client/eventDetails-3WODIXET.mjs +0 -14
  107. package/dist/client/form-AKXQMY6Z.mjs +0 -85
  108. package/dist/client/headerSection-5KHCMU6B.mjs +0 -12
  109. package/dist/client/locationMap-7HIADW76.mjs +0 -14
  110. package/dist/client/newsletterForm-5N4YTMU3.mjs +0 -60
  111. package/dist/client/productDetail-IZUA7ZP3.mjs +0 -11
  112. package/dist/client/productList-KWIIJE6I.mjs +0 -11
  113. package/dist/client/shop-XZQFRQWZ.mjs +0 -13
@@ -1431,6 +1431,9 @@ function validationContext(options = {}) {
1431
1431
  function formatFieldPath(path) {
1432
1432
  return path.map((segment) => String(segment)).join(".");
1433
1433
  }
1434
+ function toZodIssuePath(path) {
1435
+ return [...path];
1436
+ }
1434
1437
  function fieldIssueToMessage(issue2) {
1435
1438
  switch (issue2.kind) {
1436
1439
  case "required":
@@ -1559,6 +1562,9 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
1559
1562
  return assertNever(field);
1560
1563
  }
1561
1564
  }
1565
+ function deriveFieldValidationPlans(fields3, parentPath = []) {
1566
+ return fields3.map((field) => deriveFieldValidationPlan(field, [...parentPath, field.id]));
1567
+ }
1562
1568
  function commonConstraints(required, ...specific) {
1563
1569
  return required ? [{ kind: "required" }, ...specific] : [...specific];
1564
1570
  }
@@ -1574,9 +1580,19 @@ function makePlan(kind, valueKind, field, path, required, constraints) {
1574
1580
  fieldType: field.type,
1575
1581
  path,
1576
1582
  required,
1583
+ visibility: fieldVisibility(field),
1577
1584
  constraints
1578
1585
  };
1579
1586
  }
1587
+ function fieldVisibility(field) {
1588
+ if (field.ui?.hidden) {
1589
+ return { kind: "hidden" };
1590
+ }
1591
+ if (field.visibleRoles && field.visibleRoles.length > 0) {
1592
+ return { kind: "roleRestricted", roles: field.visibleRoles };
1593
+ }
1594
+ return { kind: "visible" };
1595
+ }
1580
1596
  function withRepeaterItemConstraints(field, constraints) {
1581
1597
  const next = [...constraints];
1582
1598
  if (typeof field.minItems === "number") next.push({ kind: "minItems", minimum: field.minItems });
@@ -1590,7 +1606,7 @@ function deriveRepeatedItemVariants(field, parentPath) {
1590
1606
  }));
1591
1607
  }
1592
1608
  function deriveNestedFieldPlans(fields3, parentPath) {
1593
- return fields3.map((field) => deriveFieldValidationPlan(field, [...parentPath, field.id]));
1609
+ return deriveFieldValidationPlans(fields3, parentPath);
1594
1610
  }
1595
1611
  function getRepeaterFields(field) {
1596
1612
  const fields3 = field.polymorphic && field.itemTypes ? Object.values(field.itemTypes).flatMap((itemType) => itemType.fields) : field.schema?.fields ?? [];
@@ -1616,6 +1632,71 @@ function resolveSelectConstraintSource(field) {
1616
1632
  return assertNever(source);
1617
1633
  }
1618
1634
  }
1635
+ function normalizeStoredContentValues(plans, content, options = {}) {
1636
+ if (!content || typeof content !== "object" || Array.isArray(content)) {
1637
+ return {};
1638
+ }
1639
+ const planMap = new Map(plans.map((plan) => [plan.fieldId, plan]));
1640
+ const normalized = {};
1641
+ const ctx = validationContext(options);
1642
+ for (const [key, value] of Object.entries(content)) {
1643
+ const plan = planMap.get(key);
1644
+ normalized[key] = plan ? normalizeStoredFieldValueWithContext(plan, value, ctx) : value;
1645
+ }
1646
+ return normalized;
1647
+ }
1648
+ function normalizeStoredFieldValueWithContext(plan, value, ctx) {
1649
+ if (value === null && !plan.required) {
1650
+ return void 0;
1651
+ }
1652
+ switch (plan.kind) {
1653
+ case "group":
1654
+ return normalizeStoredObjectChildren(plan.children, value, childValidationContext(plan, ctx));
1655
+ case "repeater":
1656
+ return normalizeStoredRepeaterItems(plan, value, ctx);
1657
+ case "string":
1658
+ case "number":
1659
+ case "boolean":
1660
+ case "richText":
1661
+ case "media":
1662
+ case "link":
1663
+ case "select":
1664
+ case "passthrough":
1665
+ return normalizeFieldValue(plan, value, ctx);
1666
+ default:
1667
+ return assertNever(plan);
1668
+ }
1669
+ }
1670
+ function normalizeStoredObjectChildren(children, value, ctx) {
1671
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
1672
+ return value;
1673
+ }
1674
+ const normalized = { ...value };
1675
+ for (const child of children) {
1676
+ normalized[child.fieldId] = normalizeStoredFieldValueWithContext(
1677
+ child,
1678
+ normalized[child.fieldId],
1679
+ ctx
1680
+ );
1681
+ }
1682
+ return normalized;
1683
+ }
1684
+ function normalizeStoredRepeaterItems(plan, value, ctx) {
1685
+ if (!Array.isArray(value)) {
1686
+ return value;
1687
+ }
1688
+ return value.map((item) => {
1689
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
1690
+ return item;
1691
+ }
1692
+ const itemRecord = item;
1693
+ const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemRecord._type)?.fields : plan.repeatedItemPlan;
1694
+ if (!fields3) {
1695
+ return item;
1696
+ }
1697
+ return normalizeStoredObjectChildren(fields3, itemRecord, ctx);
1698
+ });
1699
+ }
1619
1700
  function normalizeFieldValue(plan, value, ctx) {
1620
1701
  switch (plan.kind) {
1621
1702
  case "number":
@@ -1870,16 +1951,19 @@ function fieldPlanToZod(plan, options = {}) {
1870
1951
  const ctx = validationContext(options);
1871
1952
  return z4.any().transform((value) => normalizeFieldValue(plan, value, ctx)).superRefine((value, zodCtx) => {
1872
1953
  for (const validationIssue of validateNormalizedFieldValue(plan, value, ctx)) {
1873
- addFieldIssueToZodContext(zodCtx, validationIssue);
1954
+ addFieldIssueToZodContext(zodCtx, validationIssue, plan.path);
1874
1955
  }
1875
1956
  });
1876
1957
  }
1877
- function addFieldIssueToZodContext(zodCtx, validationIssue) {
1958
+ function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
1878
1959
  const message = fieldIssueToMessage(validationIssue);
1960
+ const path = relativeZodIssuePath(validationIssue.path, rootPath);
1961
+ const issuePath = path.length > 0 ? { path: toZodIssuePath(path) } : {};
1879
1962
  switch (validationIssue.kind) {
1880
1963
  case "required":
1881
1964
  if (validationIssue.emptyOrigin) {
1882
1965
  zodCtx.addIssue({
1966
+ ...issuePath,
1883
1967
  code: "too_small",
1884
1968
  origin: validationIssue.emptyOrigin,
1885
1969
  minimum: 1,
@@ -1888,10 +1972,11 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1888
1972
  });
1889
1973
  return;
1890
1974
  }
1891
- zodCtx.addIssue({ code: "invalid_type", expected: "nonoptional", message });
1975
+ zodCtx.addIssue({ ...issuePath, code: "invalid_type", expected: "nonoptional", message });
1892
1976
  return;
1893
1977
  case "tooLong":
1894
1978
  zodCtx.addIssue({
1979
+ ...issuePath,
1895
1980
  code: "too_big",
1896
1981
  origin: "string",
1897
1982
  maximum: validationIssue.maximum,
@@ -1900,7 +1985,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1900
1985
  });
1901
1986
  return;
1902
1987
  case "invalidOption":
1903
- zodCtx.addIssue({ code: "invalid_value", values: [], message });
1988
+ zodCtx.addIssue({ ...issuePath, code: "invalid_value", values: [], message });
1904
1989
  return;
1905
1990
  case "wrongType":
1906
1991
  case "invalidEmail":
@@ -1917,12 +2002,15 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1917
2002
  case "invalidMedia":
1918
2003
  case "invalidLink":
1919
2004
  case "invalidReference":
1920
- zodCtx.addIssue({ code: "custom", message });
2005
+ zodCtx.addIssue({ ...issuePath, code: "custom", message });
1921
2006
  return;
1922
2007
  default:
1923
2008
  assertNever(validationIssue);
1924
2009
  }
1925
2010
  }
2011
+ function relativeZodIssuePath(path, rootPath) {
2012
+ return startsWithFieldPath(path, rootPath) ? path.slice(rootPath.length) : path;
2013
+ }
1926
2014
  function compilePattern(pattern) {
1927
2015
  try {
1928
2016
  return new RegExp(pattern);
@@ -2000,24 +2088,33 @@ function preprocessEmptyValues(content) {
2000
2088
  }
2001
2089
  return result;
2002
2090
  }
2003
- function deriveContentZodFromManifest(manifestOrFields, options = {}) {
2004
- const shape = {};
2005
- const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
2006
- for (const field of fields3) {
2007
- shape[field.id] = buildFieldSchema(field, options);
2008
- }
2009
- return z5.object(shape).catchall(z5.unknown()).passthrough();
2010
- }
2011
2091
  function createManifestValidator(manifestOrFields, options = {}) {
2012
2092
  const isDraft = options.mode === "draft";
2013
- const baseSchema = deriveContentZodFromManifest(manifestOrFields, options);
2093
+ const plans = derivePlansFromManifestOrFields(manifestOrFields);
2094
+ const baseSchema = deriveContentZodFromPlans(plans, options);
2014
2095
  if (isDraft) {
2015
- return z5.preprocess(preprocessEmptyValues, baseSchema);
2096
+ return z5.preprocess(
2097
+ (content) => preprocessEmptyValues(
2098
+ normalizeStoredContentValues(plans, content, options)
2099
+ ),
2100
+ baseSchema
2101
+ );
2016
2102
  }
2017
- return baseSchema;
2103
+ return z5.preprocess(
2104
+ (content) => normalizeStoredContentValues(plans, content, options),
2105
+ baseSchema
2106
+ );
2018
2107
  }
2019
- function buildFieldSchema(field, options) {
2020
- return fieldPlanToZod(deriveFieldValidationPlan(field), options);
2108
+ function deriveContentZodFromPlans(plans, options) {
2109
+ const shape = {};
2110
+ for (const plan of plans) {
2111
+ shape[plan.fieldId] = fieldPlanToZod(plan, options);
2112
+ }
2113
+ return z5.object(shape).catchall(z5.unknown()).passthrough();
2114
+ }
2115
+ function derivePlansFromManifestOrFields(manifestOrFields) {
2116
+ const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
2117
+ return deriveFieldValidationPlans(fields3);
2021
2118
  }
2022
2119
 
2023
2120
  // ../blocks/src/system/manifest/variantKey.ts
@@ -18463,7 +18560,7 @@ var cardStylingFields = [
18463
18560
  description: "Text for the event action button",
18464
18561
  required: false,
18465
18562
  multiline: false,
18466
- defaultValue: "View event",
18563
+ defaultValue: "Book now",
18467
18564
  maxLength: 40
18468
18565
  }
18469
18566
  ];
@@ -18975,6 +19072,7 @@ var eventRegistrationBlockDefinition = {
18975
19072
  limit: "50",
18976
19073
  // Get more events for selection
18977
19074
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19075
+ readProfile: "registration",
18978
19076
  // When rendering on an event content entry page, scope the list to that entry so
18979
19077
  // the wizard always includes the current event (and avoids stale cached "all events" responses).
18980
19078
  entryId: { $bind: { from: "$root.contentEntry._entryId", fallback: "" } }
@@ -19923,7 +20021,7 @@ var eventSpotlightLayout = [
19923
20021
  columns: { $bind: { from: "content.columns", fallback: "3" } },
19924
20022
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
19925
20023
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
19926
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
20024
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
19927
20025
  ctaLabel: { $bind: { from: "content.ctaLabel" } },
19928
20026
  ctaUrl: { $bind: { from: "content.ctaUrl", transforms: [{ id: "links.resolve" }] } },
19929
20027
  showVenue: { $bind: { from: "content.showVenue" } },
@@ -19967,7 +20065,8 @@ var eventSpotlightBlockDefinition = {
19967
20065
  siteId: { $bind: { from: "$root.siteId" } },
19968
20066
  limit: { $bind: { from: "content.maxEvents", fallback: "3" } },
19969
20067
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19970
- detailLevel: "listing"
20068
+ detailLevel: "listing",
20069
+ readProfile: "spotlight"
19971
20070
  },
19972
20071
  mode: "server"
19973
20072
  }
@@ -20439,7 +20538,7 @@ var COLUMN_CLASSES = {
20439
20538
  };
20440
20539
  function getContainerClass(layout, columns) {
20441
20540
  if (layout === "compact") {
20442
- return "rb-flex rb-flex-col rb-gap-2";
20541
+ return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
20443
20542
  }
20444
20543
  if (layout === "stack") {
20445
20544
  return "rb-flex rb-flex-col rb-gap-6";
@@ -20570,7 +20669,7 @@ function formatEventPrice(event) {
20570
20669
  }
20571
20670
  function resolveEventCta(event, buttonText) {
20572
20671
  const { isFull: isSoldOut } = getEventAvailability(event);
20573
- const defaultButtonText = event.kind === "course_session" ? "View course" : "View event";
20672
+ const defaultButtonText = event.kind === "course_session" ? "Book course" : "Book now";
20574
20673
  const effectiveButtonText = buttonText ?? defaultButtonText;
20575
20674
  if (isSoldOut) {
20576
20675
  return { label: "Sold out", href: event.path, hidden: true };
@@ -22185,7 +22284,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
22185
22284
  containerClass: getContainerClass(layout, source.columns ?? "3"),
22186
22285
  cardVariant: source.cardVariant ?? "default",
22187
22286
  buttonVariant: source.buttonVariant ?? "primary",
22188
- buttonText: source.buttonText ?? "View event",
22287
+ buttonText: source.buttonText ?? "Book now",
22189
22288
  showVenue: source.showVenue ?? true,
22190
22289
  showMap: source.showMap ?? true,
22191
22290
  showCapacity: source.showCapacity ?? true,
@@ -22432,7 +22531,7 @@ var eventListingLayout = [
22432
22531
  loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
22433
22532
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
22434
22533
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
22435
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
22534
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
22436
22535
  showVenue: { $bind: { from: "content.showVenue" } },
22437
22536
  showMap: { $bind: { from: "content.showMap" } },
22438
22537
  showCapacity: { $bind: { from: "content.showCapacity" } },
@@ -22510,6 +22609,7 @@ var eventListingBlockDefinition = {
22510
22609
  limit: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
22511
22610
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
22512
22611
  detailLevel: "listing",
22612
+ readProfile: { $bind: { from: "content.layout", fallback: "listing-card" } },
22513
22613
  kind: { $bind: { from: "content.kind" } },
22514
22614
  eventSurface: { $bind: { from: "content.eventSurface" } },
22515
22615
  eventPresets: {
@@ -22649,7 +22749,7 @@ function buildEventCalendarDisplay(source) {
22649
22749
  ),
22650
22750
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
22651
22751
  buttonVariant: source.buttonVariant ?? "primary",
22652
- buttonText: source.buttonText ?? "View event",
22752
+ buttonText: source.buttonText ?? "Book now",
22653
22753
  showVenue: source.showVenue ?? true,
22654
22754
  showMap: source.showMap ?? true,
22655
22755
  showCapacity: source.showCapacity ?? true,
@@ -22838,7 +22938,7 @@ var eventCalendarLayout = [
22838
22938
  $bind: { from: "content.buttonVariant", fallback: "primary" }
22839
22939
  },
22840
22940
  buttonText: {
22841
- $bind: { from: "content.buttonText", fallback: "View event" }
22941
+ $bind: { from: "content.buttonText", fallback: "Book now" }
22842
22942
  },
22843
22943
  emptyMessage: { $bind: { from: "content.emptyMessage" } }
22844
22944
  })
@@ -23299,6 +23399,7 @@ var eventCalendarBlockDefinition = {
23299
23399
  limit: 100,
23300
23400
  stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
23301
23401
  detailLevel: "listing",
23402
+ readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
23302
23403
  // Pass filter params if configured
23303
23404
  kind: { $bind: { from: "content.kind" } },
23304
23405
  eventSurface: { $bind: { from: "content.eventSurface" } },
@@ -29630,9 +29731,9 @@ function getEmbedUrl(info) {
29630
29731
  const kind = info.kind ?? "p";
29631
29732
  return `https://www.instagram.com/${kind}/${info.id}/embed`;
29632
29733
  }
29633
- default:
29634
- return "";
29635
29734
  }
29735
+ const exhaustive = info.provider;
29736
+ return exhaustive;
29636
29737
  }
29637
29738
  function getThumbnailUrl(info) {
29638
29739
  switch (info.provider) {
@@ -29642,9 +29743,20 @@ function getThumbnailUrl(info) {
29642
29743
  return `https://vumbnail.com/${info.id}.jpg`;
29643
29744
  case "instagram":
29644
29745
  return "";
29645
- default:
29646
- return "";
29647
29746
  }
29747
+ const exhaustive = info.provider;
29748
+ return exhaustive;
29749
+ }
29750
+ function getVideoEmbedLoadingStrategy(provider) {
29751
+ switch (provider) {
29752
+ case "youtube":
29753
+ case "vimeo":
29754
+ return "native-lazy";
29755
+ case "instagram":
29756
+ return "defer-until-near-viewport";
29757
+ }
29758
+ const exhaustive = provider;
29759
+ return exhaustive;
29648
29760
  }
29649
29761
  function getVideoEmbed(url) {
29650
29762
  const info = parseVideoUrl(url);
@@ -29659,7 +29771,7 @@ function getVideoEmbed(url) {
29659
29771
  }
29660
29772
 
29661
29773
  // ../blocks/src/system/runtime/nodes/video-embed.tsx
29662
- import { jsx as jsx18 } from "react/jsx-runtime";
29774
+ import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
29663
29775
  var VideoEmbedNode = ({
29664
29776
  value,
29665
29777
  className,
@@ -29702,35 +29814,43 @@ var VideoEmbedNode = ({
29702
29814
  );
29703
29815
  }
29704
29816
  const title = getVideoTitle(embedInfo);
29705
- return /* @__PURE__ */ jsx18("div", { ...rest, children: /* @__PURE__ */ jsx18(
29817
+ const loadingStrategy = getVideoEmbedLoadingStrategy(embedInfo.provider);
29818
+ const shouldDeferSrc = loadingStrategy === "defer-until-near-viewport";
29819
+ return /* @__PURE__ */ jsx18("div", { ...rest, children: /* @__PURE__ */ jsxs7(
29706
29820
  "div",
29707
29821
  {
29708
29822
  className,
29823
+ "data-rb-video-embed-wrapper": shouldDeferSrc ? "true" : void 0,
29709
29824
  style: {
29710
29825
  ...style,
29711
29826
  aspectRatio: resolvedAspectRatio,
29712
29827
  position: "relative",
29713
29828
  width: "100%"
29714
29829
  },
29715
- children: /* @__PURE__ */ jsx18(
29716
- "iframe",
29717
- {
29718
- src: embedInfo.embedUrl,
29719
- title,
29720
- style: {
29721
- position: "absolute",
29722
- top: 0,
29723
- left: 0,
29724
- width: "100%",
29725
- height: "100%",
29726
- border: "none"
29727
- },
29728
- loading: "lazy",
29729
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
29730
- referrerPolicy: "no-referrer-when-downgrade",
29731
- allowFullScreen: true
29732
- }
29733
- )
29830
+ children: [
29831
+ /* @__PURE__ */ jsx18(
29832
+ "iframe",
29833
+ {
29834
+ src: shouldDeferSrc ? void 0 : embedInfo.embedUrl,
29835
+ title,
29836
+ loading: "lazy",
29837
+ "data-rb-video-embed-deferred": shouldDeferSrc ? "true" : void 0,
29838
+ "data-rb-video-embed-src": shouldDeferSrc ? embedInfo.embedUrl : void 0,
29839
+ style: {
29840
+ position: "absolute",
29841
+ top: 0,
29842
+ left: 0,
29843
+ width: "100%",
29844
+ height: "100%",
29845
+ border: "none"
29846
+ },
29847
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
29848
+ referrerPolicy: "no-referrer-when-downgrade",
29849
+ allowFullScreen: true
29850
+ }
29851
+ ),
29852
+ shouldDeferSrc ? /* @__PURE__ */ jsx18("noscript", { children: /* @__PURE__ */ jsx18("a", { href: embedInfo.url, children: "View on Instagram" }) }) : null
29853
+ ]
29734
29854
  }
29735
29855
  ) });
29736
29856
  };
@@ -29745,9 +29865,9 @@ function getVideoTitle(info) {
29745
29865
  const label = kind === "reel" ? "reel" : kind === "tv" ? "video" : "post";
29746
29866
  return `Instagram ${label} ${info.id}`;
29747
29867
  }
29748
- default:
29749
- return "Embedded video";
29750
29868
  }
29869
+ const exhaustive = info.provider;
29870
+ return exhaustive;
29751
29871
  }
29752
29872
  function getAspectRatio(propAspectRatio, style) {
29753
29873
  const styleAspectRatio = style?.aspectRatio;
@@ -29829,7 +29949,7 @@ function getCarouselSlidesToShowCssVars(value) {
29829
29949
  }
29830
29950
 
29831
29951
  // ../blocks/src/system/runtime/nodes/carousel.server.tsx
29832
- import { jsx as jsx20, jsxs as jsxs7 } from "react/jsx-runtime";
29952
+ import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
29833
29953
  var CarouselNodeSSR = ({
29834
29954
  blockId,
29835
29955
  children,
@@ -29848,7 +29968,7 @@ var CarouselNodeSSR = ({
29848
29968
  const resolvedSlides = resolveSlidesToShowMobile(normalizedSlidesToShow);
29849
29969
  const controlsEnabled = arrowVisibility === "never" ? false : normalizeBoolean2(showControls);
29850
29970
  const shouldSnap = transition === "slide";
29851
- return /* @__PURE__ */ jsxs7(
29971
+ return /* @__PURE__ */ jsxs8(
29852
29972
  "div",
29853
29973
  {
29854
29974
  className: clsx_default("carousel-root rb-relative", className),
@@ -29912,7 +30032,7 @@ function normalizeBoolean2(value) {
29912
30032
  }
29913
30033
 
29914
30034
  // ../blocks/src/system/runtime/nodes/accordion.server.tsx
29915
- import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
30035
+ import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
29916
30036
  var ACCORDION_ICONS = {
29917
30037
  Plus,
29918
30038
  Minus,
@@ -29929,7 +30049,7 @@ var AccordionNodeSSR = ({
29929
30049
  defaultValue,
29930
30050
  collapsible
29931
30051
  }) => {
29932
- return /* @__PURE__ */ jsxs8(
30052
+ return /* @__PURE__ */ jsxs9(
29933
30053
  "div",
29934
30054
  {
29935
30055
  className: clsx_default("accordion-root", className),
@@ -29959,16 +30079,16 @@ var AccordionItemNodeSSR = ({
29959
30079
  const iconConfig = ICON_CONFIG[resolvedIconStyle];
29960
30080
  const ClosedIconComponent = ACCORDION_ICONS[iconConfig.closedIcon];
29961
30081
  const OpenIconComponent = iconConfig.openIcon ? ACCORDION_ICONS[iconConfig.openIcon] : null;
29962
- return /* @__PURE__ */ jsxs8(
30082
+ return /* @__PURE__ */ jsxs9(
29963
30083
  "div",
29964
30084
  {
29965
30085
  className: clsx_default("accordion-item", className),
29966
30086
  "data-accordion-value": resolvedValue,
29967
30087
  "data-state": "closed",
29968
30088
  children: [
29969
- /* @__PURE__ */ jsxs8("div", { className: "accordion-trigger", role: "button", tabIndex: 0, "aria-expanded": "false", children: [
30089
+ /* @__PURE__ */ jsxs9("div", { className: "accordion-trigger", role: "button", tabIndex: 0, "aria-expanded": "false", children: [
29970
30090
  /* @__PURE__ */ jsx21("span", { className: "accordion-trigger-text", children: resolveNode(triggerSource) }),
29971
- /* @__PURE__ */ jsxs8("span", { className: "accordion-icon", "aria-hidden": "true", children: [
30091
+ /* @__PURE__ */ jsxs9("span", { className: "accordion-icon", "aria-hidden": "true", children: [
29972
30092
  ClosedIconComponent && /* @__PURE__ */ jsx21(ClosedIconComponent, { className: "accordion-icon-closed" }),
29973
30093
  OpenIconComponent && /* @__PURE__ */ jsx21(OpenIconComponent, { className: "accordion-icon-open" })
29974
30094
  ] })
@@ -29997,7 +30117,7 @@ function resolveNode(value) {
29997
30117
  }
29998
30118
 
29999
30119
  // ../blocks/src/system/runtime/nodes/header-section.server.tsx
30000
- import { jsx as jsx22, jsxs as jsxs9 } from "react/jsx-runtime";
30120
+ import { jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
30001
30121
  function hasShrinkClasses(className) {
30002
30122
  return typeof className === "string" && className.includes("rb-header-shrink");
30003
30123
  }
@@ -30005,16 +30125,21 @@ var HeaderSectionNode = ({
30005
30125
  blockId,
30006
30126
  children,
30007
30127
  className,
30128
+ "data-preview-site-chrome-surface": previewSiteChromeSurface,
30008
30129
  ...rest
30009
30130
  }) => {
30010
30131
  const { wrapperClasses, sectionClasses } = splitPositioningClasses(className);
30011
- const wrapperClassName = `block-site-header${wrapperClasses ? ` ${wrapperClasses}` : ""}`;
30132
+ const wrapperClassName = [
30133
+ "block-site-header",
30134
+ wrapperClasses,
30135
+ previewSiteChromeSurface ? "group/site-chrome rb-relative" : ""
30136
+ ].filter(Boolean).join(" ");
30012
30137
  const asProp = rest.as;
30013
30138
  const styleProp = rest.style;
30014
30139
  const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
30015
30140
  const allowOverflowProp = typeof rest.allowOverflow === "boolean" ? rest.allowOverflow : void 0;
30016
30141
  const dataSlotProp = typeof rest["data-slot"] === "string" ? rest["data-slot"] : void 0;
30017
- return /* @__PURE__ */ jsxs9(
30142
+ return /* @__PURE__ */ jsxs10(
30018
30143
  "nav",
30019
30144
  {
30020
30145
  ...getIslandRootProps("headerSection", blockId),
@@ -30024,6 +30149,7 @@ var HeaderSectionNode = ({
30024
30149
  "data-block": "site-header",
30025
30150
  "data-block-kind": "block.site-header",
30026
30151
  "data-block-id": blockId ?? void 0,
30152
+ "data-preview-site-chrome-surface": previewSiteChromeSurface,
30027
30153
  children: [
30028
30154
  /* @__PURE__ */ jsx22(IslandPropsScript, { value: { enabled: hasShrinkClasses(className) } }),
30029
30155
  /* @__PURE__ */ jsx22(
@@ -30045,7 +30171,7 @@ var HeaderSectionNode = ({
30045
30171
  var header_section_server_default = HeaderSectionNode;
30046
30172
 
30047
30173
  // ../blocks/src/system/runtime/nodes/spinner.tsx
30048
- import { jsx as jsx23, jsxs as jsxs10 } from "react/jsx-runtime";
30174
+ import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
30049
30175
  function resolveColorStyle(color) {
30050
30176
  switch (color) {
30051
30177
  case "inherit":
@@ -30072,7 +30198,7 @@ function SpinnerNode({
30072
30198
  const accessibilityProps = srLabel ? { role: "status", "aria-live": "polite" } : hasExplicitAriaLabel ? {} : { "aria-hidden": true };
30073
30199
  const trackStroke = color === "inherit" ? "currentColor" : "var(--rb-spinner-track-color)";
30074
30200
  const trackOpacity = color === "inherit" ? 0.25 : 1;
30075
- return /* @__PURE__ */ jsxs10(
30201
+ return /* @__PURE__ */ jsxs11(
30076
30202
  "span",
30077
30203
  {
30078
30204
  ...accessibilityProps,
@@ -30088,7 +30214,7 @@ function SpinnerNode({
30088
30214
  },
30089
30215
  ...rest,
30090
30216
  children: [
30091
- /* @__PURE__ */ jsxs10("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
30217
+ /* @__PURE__ */ jsxs11("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
30092
30218
  /* @__PURE__ */ jsx23(
30093
30219
  "circle",
30094
30220
  {
@@ -30472,7 +30598,7 @@ function buildBookingFormInteractiveIslandProps(props2) {
30472
30598
  }
30473
30599
 
30474
30600
  // ../blocks/src/system/runtime/nodes/booking-form.server.tsx
30475
- import { Fragment as Fragment2, jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
30601
+ import { Fragment as Fragment2, jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
30476
30602
  function BookingFormSSR({
30477
30603
  blockId,
30478
30604
  siteId,
@@ -30516,14 +30642,14 @@ function BookingFormSSR({
30516
30642
  className
30517
30643
  });
30518
30644
  const display = islandProps.render.display;
30519
- return /* @__PURE__ */ jsxs11(
30645
+ return /* @__PURE__ */ jsxs12(
30520
30646
  "div",
30521
30647
  {
30522
30648
  className: `booking-form-ssr ${className ?? ""}`.trim(),
30523
30649
  ...getIslandRootProps("booking-form", blockId),
30524
30650
  children: [
30525
30651
  /* @__PURE__ */ jsx24(IslandPropsScript, { value: islandProps }),
30526
- /* @__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: [
30652
+ /* @__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: [
30527
30653
  /* @__PURE__ */ jsx24("strong", { children: display.submitLabel }),
30528
30654
  display.successMessage ? /* @__PURE__ */ jsx24("p", { className: "booking-form-ssr__success", children: display.successMessage }) : null
30529
30655
  ] }) }),
@@ -30633,22 +30759,22 @@ function filterMembershipsForEvent(siteMemberships, event) {
30633
30759
  }
30634
30760
 
30635
30761
  // ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
30636
- import { jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
30762
+ import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
30637
30763
  function CoursePricingDisplay({
30638
30764
  pricing,
30639
30765
  acceptedItems
30640
30766
  }) {
30641
- return /* @__PURE__ */ jsxs12("div", { className: "rb-mt-6", children: [
30767
+ return /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30642
30768
  /* @__PURE__ */ jsx25("div", { className: "rb-label rb-mb-2", children: pricing.selectableOptions.length > 1 ? "Pricing" : "Cost" }),
30643
- 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: [
30644
- /* @__PURE__ */ jsxs12("strong", { children: [
30769
+ 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: [
30770
+ /* @__PURE__ */ jsxs13("strong", { children: [
30645
30771
  option.name,
30646
30772
  ": ",
30647
30773
  formatCoursePriceAmount(option.priceAmount, pricing.currency)
30648
30774
  ] }),
30649
30775
  option.description ? /* @__PURE__ */ jsx25("p", { className: "rb-caption status-muted", children: option.description }) : null
30650
30776
  ] }, option.id)) }) : /* @__PURE__ */ jsx25("p", { children: /* @__PURE__ */ jsx25("strong", { children: formatCoursePriceDisplay(pricing.display) }) }),
30651
- acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption rb-mt-1", children: [
30777
+ acceptedItems.length > 0 ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
30652
30778
  "You can also attend with: ",
30653
30779
  acceptedItems.join(", ")
30654
30780
  ] }) : null
@@ -30656,7 +30782,7 @@ function CoursePricingDisplay({
30656
30782
  }
30657
30783
 
30658
30784
  // ../blocks/src/system/runtime/nodes/event-details/view.tsx
30659
- import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs13 } from "react/jsx-runtime";
30785
+ import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
30660
30786
  function formatAutoApplyDiscountLine(preview, currency) {
30661
30787
  const rate = preview.discountType === "percent" ? `${preview.discountPercent}% off` : `${formatCoursePriceAmount(preview.discountAmountCents, currency)} off`;
30662
30788
  const label = preview.publicLabel.trim() || "Discount";
@@ -30707,10 +30833,10 @@ function EventDetailsView({
30707
30833
  acceptedItems.push(...applicableMemberships.map((m) => m.name));
30708
30834
  }
30709
30835
  const hasAcceptedItems = acceptedItems.length > 0;
30710
- return /* @__PURE__ */ jsxs13("div", { className: "rb-flex rb-flex-col rb-gap-6 rb-text-left", children: [
30711
- /* @__PURE__ */ jsxs13("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
30712
- /* @__PURE__ */ jsxs13("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
30713
- /* @__PURE__ */ jsxs13("div", { children: [
30836
+ return /* @__PURE__ */ jsxs14("div", { className: "rb-flex rb-flex-col rb-gap-6 rb-text-left", children: [
30837
+ /* @__PURE__ */ jsxs14("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
30838
+ /* @__PURE__ */ jsxs14("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
30839
+ /* @__PURE__ */ jsxs14("div", { children: [
30714
30840
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: selection.mode === "next" ? "Next date" : "Date" }),
30715
30841
  (() => {
30716
30842
  const { date, timeRange } = formatEventDateParts({
@@ -30718,20 +30844,20 @@ function EventDetailsView({
30718
30844
  endsAt: selected.endsAt,
30719
30845
  timeZone: selection.timeZone
30720
30846
  });
30721
- return /* @__PURE__ */ jsxs13(Fragment3, { children: [
30847
+ return /* @__PURE__ */ jsxs14(Fragment3, { children: [
30722
30848
  /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: date }) }),
30723
30849
  /* @__PURE__ */ jsx26("p", { className: "rb-caption", children: timeRange })
30724
30850
  ] });
30725
30851
  })()
30726
30852
  ] }),
30727
- venue ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30853
+ venue ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30728
30854
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Venue" }),
30729
30855
  /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: venue.name }) }),
30730
30856
  venue.address ? /* @__PURE__ */ jsx26("p", { className: "rb-caption", children: venue.address }) : null
30731
30857
  ] }) : null,
30732
- teamMembers.length > 0 ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30858
+ teamMembers.length > 0 ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30733
30859
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Team members" }),
30734
- /* @__PURE__ */ jsx26("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs13("div", { children: [
30860
+ /* @__PURE__ */ jsx26("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs14("div", { children: [
30735
30861
  /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26(
30736
30862
  TeamMemberName,
30737
30863
  {
@@ -30742,7 +30868,7 @@ function EventDetailsView({
30742
30868
  teamMember.summary ? /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: teamMember.summary }) : null
30743
30869
  ] }, teamMember.id)) })
30744
30870
  ] }) : null,
30745
- isDropIn ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30871
+ isDropIn ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30746
30872
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Registration" }),
30747
30873
  /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: "No registration required - just show up" })
30748
30874
  ] }) : shouldShowCoursePricing ? /* @__PURE__ */ jsx26(
@@ -30751,22 +30877,22 @@ function EventDetailsView({
30751
30877
  pricing: coursePricing,
30752
30878
  acceptedItems
30753
30879
  }
30754
- ) : shouldShowEventCost ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30880
+ ) : shouldShowEventCost ? /* @__PURE__ */ jsxs14("div", { className: "rb-mt-6", children: [
30755
30881
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Cost" }),
30756
30882
  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" }),
30757
30883
  autoApplyDiscount ? /* @__PURE__ */ jsx26("p", { className: "rb-caption rb-mt-1", children: formatAutoApplyDiscountLine(autoApplyDiscount, selected.currency ?? "USD") }) : null,
30758
- hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
30884
+ hasAcceptedItems ? /* @__PURE__ */ jsxs14("p", { className: "rb-caption rb-mt-1", children: [
30759
30885
  "You can also attend with: ",
30760
30886
  acceptedItems.join(", ")
30761
30887
  ] }) : null
30762
- ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption", children: [
30888
+ ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs14("p", { className: "rb-caption", children: [
30763
30889
  "You can also attend with: ",
30764
30890
  acceptedItems.join(", ")
30765
30891
  ] }) }) : null
30766
30892
  ] }),
30767
30893
  showMap && renderVenueMap && venue?.location ? /* @__PURE__ */ jsx26(Fragment3, { children: renderVenueMap({ venueName: venue.name, location: venue.location, className: mapClassName, height: mapHeight }) }) : null
30768
30894
  ] }),
30769
- showOtherDates && selection.otherDates.length > 0 ? /* @__PURE__ */ jsxs13("div", { children: [
30895
+ showOtherDates && selection.otherDates.length > 0 ? /* @__PURE__ */ jsxs14("div", { children: [
30770
30896
  /* @__PURE__ */ jsx26("div", { className: "rb-label", children: "Other dates" }),
30771
30897
  /* @__PURE__ */ jsx26("div", { className: "rb-mt-2 rb-tiles-grid", children: selection.otherDates.map((e) => /* @__PURE__ */ jsx26(
30772
30898
  "a",
@@ -30789,7 +30915,7 @@ function EventDetailsView({
30789
30915
  }
30790
30916
 
30791
30917
  // ../blocks/src/system/runtime/nodes/event-details.server.tsx
30792
- import { jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
30918
+ import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
30793
30919
  function EventDetailsSSR({
30794
30920
  blockId,
30795
30921
  occurrenceContext,
@@ -30818,7 +30944,7 @@ function EventDetailsSSR({
30818
30944
  const membershipsArray = siteMemberships?.memberships ?? null;
30819
30945
  const applicablePasses = filterPassesForEvent(passesArray, selection.selected);
30820
30946
  const applicableMemberships = filterMembershipsForEvent(membershipsArray, selection.selected);
30821
- return /* @__PURE__ */ jsxs14(
30947
+ return /* @__PURE__ */ jsxs15(
30822
30948
  "div",
30823
30949
  {
30824
30950
  className: `event-details ${className ?? ""}`.trim(),
@@ -30884,7 +31010,7 @@ function EventDetailsSSR({
30884
31010
  var event_details_server_default = EventDetailsSSR;
30885
31011
 
30886
31012
  // ../blocks/src/system/runtime/nodes/location-map.view.tsx
30887
- import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
31013
+ import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
30888
31014
  function LocationMapView({
30889
31015
  addressText,
30890
31016
  location: location2,
@@ -30900,7 +31026,7 @@ function LocationMapView({
30900
31026
  if (!location2 && !addressText && !directionsUrl) {
30901
31027
  return /* @__PURE__ */ jsx28("p", { className: "rb-caption", style: textColorStyle("mutedText"), children: unresolvedMessage ?? "Location details coming soon." });
30902
31028
  }
30903
- return /* @__PURE__ */ jsxs15("div", { className: "rb-flex rb-flex-col rb-gap-4 rb-text-left", children: [
31029
+ return /* @__PURE__ */ jsxs16("div", { className: "rb-flex rb-flex-col rb-gap-4 rb-text-left", children: [
30904
31030
  location2 && renderMap ? renderMap({
30905
31031
  addressText,
30906
31032
  location: location2,
@@ -30928,11 +31054,11 @@ function LocationMapView({
30928
31054
  }
30929
31055
 
30930
31056
  // ../blocks/src/system/runtime/nodes/location-map.server.tsx
30931
- import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
31057
+ import { jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
30932
31058
  function LocationMapSSR(props2) {
30933
31059
  const normalized = normalizeLocationMapProps(props2);
30934
31060
  const hydrationProps = toLocationMapHydrationProps(props2);
30935
- return /* @__PURE__ */ jsxs16(
31061
+ return /* @__PURE__ */ jsxs17(
30936
31062
  "div",
30937
31063
  {
30938
31064
  className: `location-map ${normalized.className ?? ""}`.trim(),
@@ -31087,7 +31213,7 @@ function formatCourseDateRange(range) {
31087
31213
  }
31088
31214
 
31089
31215
  // ../blocks/src/system/runtime/nodes/course-details/view.tsx
31090
- import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
31216
+ import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
31091
31217
  function TeamMemberName2({
31092
31218
  name,
31093
31219
  profilePath
@@ -31122,14 +31248,14 @@ function CourseDetailsView(props2) {
31122
31248
  const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
31123
31249
  const descriptionDoc = showDescription ? coerceRichTextDoc(course.description) : null;
31124
31250
  const teamMembers = course.teamMembers ?? [];
31125
- return /* @__PURE__ */ jsxs17("div", { className: "rb-flex rb-flex-col rb-gap-6", children: [
31251
+ return /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-6", children: [
31126
31252
  showTitle && /* @__PURE__ */ jsx30("h3", { children: course.title }),
31127
- /* @__PURE__ */ jsxs17("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
31128
- /* @__PURE__ */ jsxs17("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31129
- showPrice && /* @__PURE__ */ jsxs17("div", { children: [
31253
+ /* @__PURE__ */ jsxs18("div", { className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2", children: [
31254
+ /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31255
+ showPrice && /* @__PURE__ */ jsxs18("div", { children: [
31130
31256
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price" }),
31131
- 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: [
31132
- /* @__PURE__ */ jsxs17("strong", { children: [
31257
+ 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: [
31258
+ /* @__PURE__ */ jsxs18("strong", { children: [
31133
31259
  option.name,
31134
31260
  ": ",
31135
31261
  formatCoursePriceAmount(
@@ -31140,17 +31266,17 @@ function CourseDetailsView(props2) {
31140
31266
  option.description ? /* @__PURE__ */ jsx30("p", { className: "rb-caption status-muted", children: option.description }) : null
31141
31267
  ] }, option.id)) }) : /* @__PURE__ */ jsx30("div", { children: /* @__PURE__ */ jsx30("strong", { children: formatCoursePriceDisplay(pricing.display) }) })
31142
31268
  ] }),
31143
- showCapacity && /* @__PURE__ */ jsxs17("div", { children: [
31269
+ showCapacity && /* @__PURE__ */ jsxs18("div", { children: [
31144
31270
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Spots" }),
31145
31271
  /* @__PURE__ */ jsx30("div", { children: /* @__PURE__ */ jsx30("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })
31146
31272
  ] }),
31147
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs17("div", { children: [
31273
+ showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs18("div", { children: [
31148
31274
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Membership" }),
31149
31275
  /* @__PURE__ */ jsx30("p", { className: "rb-caption status-muted", children: "Eligible memberships can be used for free enrollment" })
31150
31276
  ] }),
31151
- teamMembers.length > 0 && /* @__PURE__ */ jsxs17("div", { children: [
31277
+ teamMembers.length > 0 && /* @__PURE__ */ jsxs18("div", { children: [
31152
31278
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Team members" }),
31153
- /* @__PURE__ */ jsx30("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs17("div", { children: [
31279
+ /* @__PURE__ */ jsx30("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs18("div", { children: [
31154
31280
  /* @__PURE__ */ jsx30("p", { children: /* @__PURE__ */ jsx30(
31155
31281
  TeamMemberName2,
31156
31282
  {
@@ -31162,23 +31288,23 @@ function CourseDetailsView(props2) {
31162
31288
  ] }, teamMember.id)) })
31163
31289
  ] })
31164
31290
  ] }),
31165
- /* @__PURE__ */ jsxs17("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31166
- showVenue && course.venue && /* @__PURE__ */ jsxs17("div", { children: [
31291
+ /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31292
+ showVenue && course.venue && /* @__PURE__ */ jsxs18("div", { children: [
31167
31293
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Venue" }),
31168
31294
  /* @__PURE__ */ jsx30("h3", { children: course.venue.name }),
31169
31295
  course.venue.address && /* @__PURE__ */ jsx30("p", { className: "rb-caption status-muted", children: course.venue.address })
31170
31296
  ] }),
31171
- showEnrollmentStatus && /* @__PURE__ */ jsxs17("div", { children: [
31297
+ showEnrollmentStatus && /* @__PURE__ */ jsxs18("div", { children: [
31172
31298
  /* @__PURE__ */ jsx30("div", { className: "rb-label rb-mb-2", children: "Enrollment" }),
31173
31299
  /* @__PURE__ */ jsx30("p", { className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed", children: /* @__PURE__ */ jsx30("strong", { children: course.enrollmentOpen ? "Open" : "Closed" }) })
31174
31300
  ] })
31175
31301
  ] })
31176
31302
  ] }),
31177
31303
  descriptionDoc && /* @__PURE__ */ jsx30("div", { className: "cd-description", children: /* @__PURE__ */ jsx30(RichText, { doc: descriptionDoc }) }),
31178
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs17("div", { children: [
31304
+ showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs18("div", { children: [
31179
31305
  /* @__PURE__ */ jsx30("div", { className: "rb-label", children: "Sessions" }),
31180
31306
  /* @__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)) }),
31181
- hasMoreSessions && /* @__PURE__ */ jsxs17("p", { className: "cd-sessions__more", children: [
31307
+ hasMoreSessions && /* @__PURE__ */ jsxs18("p", { className: "cd-sessions__more", children: [
31182
31308
  "Showing ",
31183
31309
  visibleSessions.length,
31184
31310
  " of ",
@@ -31190,7 +31316,7 @@ function CourseDetailsView(props2) {
31190
31316
  }
31191
31317
 
31192
31318
  // ../blocks/src/system/runtime/nodes/course-details.server.tsx
31193
- import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
31319
+ import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
31194
31320
  function CourseDetailsSSR({
31195
31321
  courses,
31196
31322
  contentEntry,
@@ -31228,7 +31354,7 @@ function CourseDetailsSSR({
31228
31354
  const pastRuns = scopedWithRange.filter(({ range }) => Boolean(range.end && range.end <= now)).sort((a, b) => (b.range.end?.getTime() ?? 0) - (a.range.end?.getTime() ?? 0));
31229
31355
  const lastPastRun = pastRuns[0] ?? null;
31230
31356
  const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
31231
- return /* @__PURE__ */ jsxs18("div", { className: `course-details ${className ?? ""}`.trim(), "data-block": "course-details", children: [
31357
+ return /* @__PURE__ */ jsxs19("div", { className: `course-details ${className ?? ""}`.trim(), "data-block": "course-details", children: [
31232
31358
  selection.selected ? /* @__PURE__ */ jsx31(
31233
31359
  CourseDetailsView,
31234
31360
  {
@@ -31243,8 +31369,8 @@ function CourseDetailsSSR({
31243
31369
  showEnrollmentStatus,
31244
31370
  showMembershipNote
31245
31371
  }
31246
- ) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs18("div", { className: "rb-flex rb-flex-col rb-gap-3", children: [
31247
- /* @__PURE__ */ jsxs18("div", { children: [
31372
+ ) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs19("div", { className: "rb-flex rb-flex-col rb-gap-3", children: [
31373
+ /* @__PURE__ */ jsxs19("div", { children: [
31248
31374
  /* @__PURE__ */ jsx31("div", { className: "rb-label rb-mb-2", children: "Upcoming runs" }),
31249
31375
  /* @__PURE__ */ jsx31("p", { className: "rb-caption status-muted", children: "Choose a run to see sessions and details." })
31250
31376
  ] }),
@@ -31253,15 +31379,15 @@ function CourseDetailsSSR({
31253
31379
  const end = range.end;
31254
31380
  const isInProgress = Boolean(start && end && start <= now && end > now);
31255
31381
  const href = basePath ? `${basePath.replace(/\/$/, "")}/${course.slug}` : null;
31256
- 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: [
31257
- /* @__PURE__ */ jsxs18("div", { className: "rb-min-w-0", children: [
31382
+ 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: [
31383
+ /* @__PURE__ */ jsxs19("div", { className: "rb-min-w-0", children: [
31258
31384
  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 }) }),
31259
31385
  /* @__PURE__ */ jsx31("div", { className: "rb-caption status-muted", children: formatCourseDateRange(range) })
31260
31386
  ] }),
31261
31387
  /* @__PURE__ */ jsx31("div", { className: "rb-caption status-muted rb-shrink-0", children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed" })
31262
31388
  ] }) }) }, course.id);
31263
31389
  }) }) : /* @__PURE__ */ jsx31("p", { className: "rb-caption status-muted", children: "No upcoming runs." }),
31264
- lastPastRun ? /* @__PURE__ */ jsxs18("div", { className: "rb-caption status-muted", children: [
31390
+ lastPastRun ? /* @__PURE__ */ jsxs19("div", { className: "rb-caption status-muted", children: [
31265
31391
  "Last run: ",
31266
31392
  /* @__PURE__ */ jsx31("strong", { children: lastPastRun.course.title }),
31267
31393
  " (",
@@ -31289,14 +31415,14 @@ function CourseDetailsSSR({
31289
31415
  var course_details_server_default = CourseDetailsSSR;
31290
31416
 
31291
31417
  // ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
31292
- import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
31418
+ import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
31293
31419
  var EventSpotlight = ({
31294
31420
  events,
31295
31421
  layout = "grid",
31296
31422
  columns = "3",
31297
31423
  cardVariant = "default",
31298
31424
  buttonVariant = "primary",
31299
- buttonText = "View event",
31425
+ buttonText = "Book now",
31300
31426
  ctaLabel,
31301
31427
  ctaUrl,
31302
31428
  showVenue = true,
@@ -31312,7 +31438,7 @@ var EventSpotlight = ({
31312
31438
  const containerClass = getContainerClass(layout, columns);
31313
31439
  const cardOrientation = getCardOrientation(layout);
31314
31440
  const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
31315
- return /* @__PURE__ */ jsxs19("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
31441
+ return /* @__PURE__ */ jsxs20("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
31316
31442
  /* @__PURE__ */ jsx32("div", { className: `event-spotlight ${containerClass}`, children: normalizedEvents.map((event) => /* @__PURE__ */ jsx32(
31317
31443
  EventCard,
31318
31444
  {
@@ -31450,7 +31576,7 @@ function buildEventCombinedDisplay(source) {
31450
31576
  showMap: source.showMap ?? true,
31451
31577
  showCapacity: source.showCapacity ?? true,
31452
31578
  buttonVariant: source.buttonVariant ?? "primary",
31453
- buttonText: source.buttonText ?? "View event",
31579
+ buttonText: source.buttonText ?? "Book now",
31454
31580
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
31455
31581
  };
31456
31582
  }
@@ -31551,7 +31677,7 @@ function renderEventListItem(event, display) {
31551
31677
  }
31552
31678
 
31553
31679
  // ../blocks/src/system/runtime/nodes/events/EventCombined.server.tsx
31554
- import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
31680
+ import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
31555
31681
  var EventCombinedSSR = ({
31556
31682
  blockId,
31557
31683
  ...source
@@ -31560,7 +31686,7 @@ var EventCombinedSSR = ({
31560
31686
  const listDisplay = buildEventCombinedListingDisplay(render);
31561
31687
  const islandProps = buildEventCombinedInteractiveIslandProps(source);
31562
31688
  const ssrEmptyMessage = render.hydration.prefetchedEvents ? render.display.emptyMessage : listDisplay.loadingMessage;
31563
- return /* @__PURE__ */ jsxs20(
31689
+ return /* @__PURE__ */ jsxs21(
31564
31690
  "div",
31565
31691
  {
31566
31692
  className: `event-combined ${render.display.className || ""}`,
@@ -31568,7 +31694,7 @@ var EventCombinedSSR = ({
31568
31694
  ...getIslandRootProps("event-combined", blockId),
31569
31695
  children: [
31570
31696
  /* @__PURE__ */ jsx34(IslandPropsScript, { value: islandProps }),
31571
- /* @__PURE__ */ jsxs20("div", { className: "nav-tabs", role: "tablist", children: [
31697
+ /* @__PURE__ */ jsxs21("div", { className: "nav-tabs", role: "tablist", children: [
31572
31698
  /* @__PURE__ */ jsx34(
31573
31699
  "button",
31574
31700
  {
@@ -31597,7 +31723,7 @@ var EventCombinedSSR = ({
31597
31723
  };
31598
31724
 
31599
31725
  // ../blocks/src/system/runtime/nodes/commerce/shared/view.tsx
31600
- import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
31726
+ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
31601
31727
  function ProductBadgesView({ badges }) {
31602
31728
  if (badges.length === 0) return null;
31603
31729
  return /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-flex-wrap rb-gap-2", children: badges.map((badge) => /* @__PURE__ */ jsx35(
@@ -31612,7 +31738,7 @@ function ProductBadgesView({ badges }) {
31612
31738
  function VariantSelectView(props2) {
31613
31739
  const { options, selectedVariantId, disabled = false, onChange } = props2;
31614
31740
  if (options.length === 0) return null;
31615
- return /* @__PURE__ */ jsxs21("label", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31741
+ return /* @__PURE__ */ jsxs22("label", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31616
31742
  /* @__PURE__ */ jsx35("span", { className: "rb-label", children: "Variant" }),
31617
31743
  /* @__PURE__ */ jsx35(
31618
31744
  "select",
@@ -31621,7 +31747,7 @@ function VariantSelectView(props2) {
31621
31747
  value: selectedVariantId ?? "",
31622
31748
  disabled,
31623
31749
  onChange: onChange ? (event) => onChange(event.target.value || null) : void 0,
31624
- children: options.map((variant) => /* @__PURE__ */ jsxs21("option", { value: variant.id, children: [
31750
+ children: options.map((variant) => /* @__PURE__ */ jsxs22("option", { value: variant.id, children: [
31625
31751
  variant.label,
31626
31752
  " ",
31627
31753
  variant.soldOut ? "(Sold out)" : ""
@@ -31632,12 +31758,12 @@ function VariantSelectView(props2) {
31632
31758
  }
31633
31759
  function ProductCardView(props2) {
31634
31760
  const { display, layout, variantControl, actions, feedback } = props2;
31635
- 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: [
31761
+ 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: [
31636
31762
  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,
31637
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-1 rb-flex-col rb-gap-3", children: [
31638
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31639
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-start rb-justify-between rb-gap-3", children: [
31640
- /* @__PURE__ */ jsxs21("div", { children: [
31763
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-1 rb-flex-col rb-gap-3", children: [
31764
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31765
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-start rb-justify-between rb-gap-3", children: [
31766
+ /* @__PURE__ */ jsxs22("div", { children: [
31641
31767
  display.path ? /* @__PURE__ */ jsx35("a", { href: display.path, children: /* @__PURE__ */ jsx35("h3", { children: display.title }) }) : /* @__PURE__ */ jsx35("h3", { children: display.title }),
31642
31768
  display.summary ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.summary }) : null
31643
31769
  ] }),
@@ -31654,7 +31780,7 @@ function ProductCardView(props2) {
31654
31780
  }
31655
31781
  function ProductListSectionView(props2) {
31656
31782
  const { display, children } = props2;
31657
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--product-list ${display.className ?? ""}`.trim(), "data-block": "shop", children: [
31783
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--product-list ${display.className ?? ""}`.trim(), "data-block": "shop", children: [
31658
31784
  display.heading ? /* @__PURE__ */ jsx35("h2", { children: display.heading }) : null,
31659
31785
  display.state === "empty" ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.emptyMessage }) : /* @__PURE__ */ jsx35(
31660
31786
  "div",
@@ -31671,18 +31797,18 @@ function ProductDetailView(props2) {
31671
31797
  if (display.state === "empty") {
31672
31798
  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 }) });
31673
31799
  }
31674
- 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: [
31800
+ 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: [
31675
31801
  /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-flex-col rb-gap-4", children: gallery }),
31676
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31802
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31677
31803
  display.heading ? /* @__PURE__ */ jsx35("p", { className: "rb-label", children: display.heading }) : null,
31678
- /* @__PURE__ */ jsxs21("div", { children: [
31804
+ /* @__PURE__ */ jsxs22("div", { children: [
31679
31805
  /* @__PURE__ */ jsx35("h2", { children: display.title }),
31680
31806
  /* @__PURE__ */ jsx35("div", { className: "rb-mt-2", children: /* @__PURE__ */ jsx35("strong", { children: display.priceLabel }) })
31681
31807
  ] }),
31682
31808
  /* @__PURE__ */ jsx35(ProductBadgesView, { badges: display.badges }),
31683
31809
  display.summary ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.summary }) : null,
31684
31810
  variantControl,
31685
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-center rb-gap-3", children: [
31811
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-center rb-gap-3", children: [
31686
31812
  actions,
31687
31813
  display.categoryLabel ? /* @__PURE__ */ jsx35("span", { className: "rb-caption status-muted", children: display.categoryLabel }) : null
31688
31814
  ] }),
@@ -31708,15 +31834,15 @@ function ProductGalleryFrameView(props2) {
31708
31834
  return /* @__PURE__ */ jsx35(Fragment4, { children: renderCarousel(slides) });
31709
31835
  }
31710
31836
  function PassCardView(props2) {
31711
- return /* @__PURE__ */ jsxs21("article", { className: "shop__card shop__card--pass", children: [
31712
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-header", children: [
31837
+ return /* @__PURE__ */ jsxs22("article", { className: "shop__card shop__card--pass", children: [
31838
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-header", children: [
31713
31839
  /* @__PURE__ */ jsx35("h4", { className: "shop__card-name", children: props2.display.title }),
31714
31840
  /* @__PURE__ */ jsx35("div", { className: "shop__card-price", children: props2.display.priceLabel })
31715
31841
  ] }),
31716
31842
  props2.display.description ? /* @__PURE__ */ jsx35("p", { className: "shop__card-description", children: props2.display.description }) : null,
31717
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-details", children: [
31843
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-details", children: [
31718
31844
  /* @__PURE__ */ jsx35("span", { className: "shop__card-credits", children: props2.display.creditsLabel }),
31719
- props2.display.perCreditLabel ? /* @__PURE__ */ jsxs21("span", { className: "shop__card-per-credit", children: [
31845
+ props2.display.perCreditLabel ? /* @__PURE__ */ jsxs22("span", { className: "shop__card-per-credit", children: [
31720
31846
  "(",
31721
31847
  props2.display.perCreditLabel,
31722
31848
  ")"
@@ -31728,10 +31854,10 @@ function PassCardView(props2) {
31728
31854
  ] });
31729
31855
  }
31730
31856
  function MembershipCardView(props2) {
31731
- return /* @__PURE__ */ jsxs21("article", { className: "shop__card shop__card--membership", children: [
31732
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-header", children: [
31857
+ return /* @__PURE__ */ jsxs22("article", { className: "shop__card shop__card--membership", children: [
31858
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-header", children: [
31733
31859
  /* @__PURE__ */ jsx35("h4", { className: "shop__card-name", children: props2.display.title }),
31734
- /* @__PURE__ */ jsxs21("div", { className: "shop__card-price", children: [
31860
+ /* @__PURE__ */ jsxs22("div", { className: "shop__card-price", children: [
31735
31861
  props2.display.priceLabel,
31736
31862
  /* @__PURE__ */ jsx35("span", { className: "shop__card-interval", children: props2.display.intervalLabel })
31737
31863
  ] })
@@ -31745,7 +31871,7 @@ function PassesMembershipsSectionView(props2) {
31745
31871
  const { display, beforeContent, passCards, membershipCards } = props2;
31746
31872
  const productsClass = `shop__products shop__products--${display.layout}`;
31747
31873
  const gridStyle = display.state === "ready" ? { "--shop-columns": display.columns } : void 0;
31748
- return /* @__PURE__ */ jsxs21(
31874
+ return /* @__PURE__ */ jsxs22(
31749
31875
  "div",
31750
31876
  {
31751
31877
  className: `shop ${display.state === "ready" ? `shop--${display.layout}` : "shop--empty"} ${display.className ?? ""}`.trim(),
@@ -31755,11 +31881,11 @@ function PassesMembershipsSectionView(props2) {
31755
31881
  children: [
31756
31882
  beforeContent,
31757
31883
  display.state === "empty" ? /* @__PURE__ */ jsx35("p", { className: "shop__empty-text", children: display.emptyMessage }) : null,
31758
- display.passes.length > 0 ? /* @__PURE__ */ jsxs21("section", { className: "shop__section shop__section--passes", children: [
31884
+ display.passes.length > 0 ? /* @__PURE__ */ jsxs22("section", { className: "shop__section shop__section--passes", children: [
31759
31885
  /* @__PURE__ */ jsx35("h3", { className: "shop__section-heading", children: display.passesHeading }),
31760
31886
  /* @__PURE__ */ jsx35("div", { className: productsClass, children: passCards })
31761
31887
  ] }) : null,
31762
- display.memberships.length > 0 ? /* @__PURE__ */ jsxs21("section", { className: "shop__section shop__section--memberships", children: [
31888
+ display.memberships.length > 0 ? /* @__PURE__ */ jsxs22("section", { className: "shop__section shop__section--memberships", children: [
31763
31889
  /* @__PURE__ */ jsx35("h3", { className: "shop__section-heading", children: display.membershipsHeading }),
31764
31890
  /* @__PURE__ */ jsx35("div", { className: productsClass, children: membershipCards })
31765
31891
  ] }) : null
@@ -31769,21 +31895,21 @@ function PassesMembershipsSectionView(props2) {
31769
31895
  }
31770
31896
  function CartShellView(props2) {
31771
31897
  const { display, renderControls, footerActions } = props2;
31772
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--cart ${display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-cart", children: [
31898
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--cart ${display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-cart", children: [
31773
31899
  display.heading ? /* @__PURE__ */ jsx35("h2", { children: display.heading }) : null,
31774
- display.state === "empty" ? /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31900
+ display.state === "empty" ? /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-2", children: [
31775
31901
  /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.emptyMessage }),
31776
31902
  display.supportText ? /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: display.supportText }) : null
31777
- ] }) : /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31778
- /* @__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: [
31779
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31903
+ ] }) : /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-4", children: [
31904
+ /* @__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: [
31905
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-flex-col rb-gap-1", children: [
31780
31906
  /* @__PURE__ */ jsx35("strong", { children: item.title }),
31781
31907
  /* @__PURE__ */ jsx35("span", { className: "rb-caption status-muted", children: item.priceLabel })
31782
31908
  ] }),
31783
31909
  /* @__PURE__ */ jsx35("div", { className: "rb-flex rb-items-center rb-gap-2", children: renderControls ? renderControls(item) : null })
31784
31910
  ] }, item.key)) }),
31785
- /* @__PURE__ */ jsxs21("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-4", children: [
31786
- /* @__PURE__ */ jsxs21("div", { children: [
31911
+ /* @__PURE__ */ jsxs22("div", { className: "rb-flex rb-items-center rb-justify-between rb-gap-4", children: [
31912
+ /* @__PURE__ */ jsxs22("div", { children: [
31787
31913
  /* @__PURE__ */ jsx35("strong", { children: "Subtotal" }),
31788
31914
  /* @__PURE__ */ jsx35("div", { children: display.subtotalLabel })
31789
31915
  ] }),
@@ -31793,7 +31919,7 @@ function CartShellView(props2) {
31793
31919
  ] });
31794
31920
  }
31795
31921
  function CheckoutShellView(props2) {
31796
- return /* @__PURE__ */ jsxs21("div", { className: `shop shop--checkout ${props2.display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-checkout", children: [
31922
+ return /* @__PURE__ */ jsxs22("div", { className: `shop shop--checkout ${props2.display.className ?? ""}`.trim(), "data-block": "shop", id: "shop-checkout", children: [
31797
31923
  props2.display.heading ? /* @__PURE__ */ jsx35("h2", { children: props2.display.heading }) : null,
31798
31924
  props2.notice,
31799
31925
  props2.display.state === "ready" ? props2.body : /* @__PURE__ */ jsx35("p", { className: "rb-caption status-muted", children: props2.display.message })
@@ -31801,9 +31927,9 @@ function CheckoutShellView(props2) {
31801
31927
  }
31802
31928
 
31803
31929
  // ../blocks/src/system/runtime/nodes/shop-commerce.server.tsx
31804
- import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
31930
+ import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
31805
31931
  function renderServerPendingAction(label, soldOut) {
31806
- return /* @__PURE__ */ jsxs22(Fragment5, { children: [
31932
+ return /* @__PURE__ */ jsxs23(Fragment5, { children: [
31807
31933
  /* @__PURE__ */ jsx36(
31808
31934
  "button",
31809
31935
  {
@@ -31831,7 +31957,7 @@ function ProductListServerContent(props2) {
31831
31957
  disabled: true
31832
31958
  }
31833
31959
  ),
31834
- actions: /* @__PURE__ */ jsxs22(Fragment5, { children: [
31960
+ actions: /* @__PURE__ */ jsxs23(Fragment5, { children: [
31835
31961
  renderServerPendingAction(card.actionLabel, card.soldOut),
31836
31962
  card.path ? /* @__PURE__ */ jsx36(
31837
31963
  "a",
@@ -31882,7 +32008,7 @@ function CheckoutServerContent(props2) {
31882
32008
  }
31883
32009
 
31884
32010
  // ../blocks/src/system/runtime/nodes/cart.server.tsx
31885
- import { jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
32011
+ import { jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
31886
32012
  function CartSSR({
31887
32013
  blockId,
31888
32014
  siteId,
@@ -31897,7 +32023,7 @@ function CartSSR({
31897
32023
  stage,
31898
32024
  ...rest
31899
32025
  });
31900
- return /* @__PURE__ */ jsxs23(
32026
+ return /* @__PURE__ */ jsxs24(
31901
32027
  "div",
31902
32028
  {
31903
32029
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -31917,7 +32043,7 @@ function CartSSR({
31917
32043
  var cart_server_default = CartSSR;
31918
32044
 
31919
32045
  // ../blocks/src/system/runtime/nodes/checkout.server.tsx
31920
- import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
32046
+ import { jsx as jsx38, jsxs as jsxs25 } from "react/jsx-runtime";
31921
32047
  function CheckoutSSR({
31922
32048
  blockId,
31923
32049
  siteId,
@@ -31932,7 +32058,7 @@ function CheckoutSSR({
31932
32058
  stage,
31933
32059
  ...rest
31934
32060
  });
31935
- return /* @__PURE__ */ jsxs24(
32061
+ return /* @__PURE__ */ jsxs25(
31936
32062
  "div",
31937
32063
  {
31938
32064
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -31952,7 +32078,7 @@ function CheckoutSSR({
31952
32078
  var checkout_server_default = CheckoutSSR;
31953
32079
 
31954
32080
  // ../blocks/src/system/runtime/nodes/course-registration.server.tsx
31955
- import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
32081
+ import { jsx as jsx39, jsxs as jsxs26 } from "react/jsx-runtime";
31956
32082
  function CourseRegistrationSSR({
31957
32083
  blockId,
31958
32084
  siteId,
@@ -31993,7 +32119,7 @@ function CourseRegistrationSSR({
31993
32119
  buttonVariant,
31994
32120
  stage
31995
32121
  });
31996
- return /* @__PURE__ */ jsxs25(
32122
+ return /* @__PURE__ */ jsxs26(
31997
32123
  "div",
31998
32124
  {
31999
32125
  className: `course-registration ${className ?? ""}`.trim(),
@@ -32010,14 +32136,14 @@ function CourseRegistrationSSR({
32010
32136
  var course_registration_server_default = CourseRegistrationSSR;
32011
32137
 
32012
32138
  // ../blocks/src/system/runtime/nodes/gifting.server.tsx
32013
- import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
32139
+ import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
32014
32140
  function GiftingSSR({ blockId, ...rest }) {
32015
32141
  const islandProps = buildGiftingInteractiveIslandProps(rest);
32016
32142
  const offers = islandProps.render.hydration.offers;
32017
32143
  const hasOffers = Boolean(
32018
32144
  (offers?.giftCards.length ?? 0) > 0 || (offers?.vouchers.length ?? 0) > 0
32019
32145
  );
32020
- return /* @__PURE__ */ jsxs26(
32146
+ return /* @__PURE__ */ jsxs27(
32021
32147
  "section",
32022
32148
  {
32023
32149
  className: rest.className ?? void 0,
@@ -32028,7 +32154,7 @@ function GiftingSSR({ blockId, ...rest }) {
32028
32154
  ...getIslandRootProps("gifting", blockId),
32029
32155
  children: [
32030
32156
  /* @__PURE__ */ jsx40(IslandPropsScript, { value: islandProps }),
32031
- /* @__PURE__ */ jsxs26(
32157
+ /* @__PURE__ */ jsxs27(
32032
32158
  "div",
32033
32159
  {
32034
32160
  className: "rb-grid",
@@ -32036,14 +32162,14 @@ function GiftingSSR({ blockId, ...rest }) {
32036
32162
  gap: "1.5rem"
32037
32163
  },
32038
32164
  children: [
32039
- /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "0.5rem" }, children: [
32165
+ /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "0.5rem" }, children: [
32040
32166
  /* @__PURE__ */ jsx40("h2", { style: { fontSize: "clamp(1.75rem, 3vw, 2.5rem)", fontWeight: 700, margin: 0 }, children: islandProps.render.display.heading }),
32041
32167
  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
32042
32168
  ] }),
32043
- hasOffers ? /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "1.5rem" }, children: [
32044
- (offers?.giftCards.length ?? 0) > 0 ? /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32169
+ hasOffers ? /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "1.5rem" }, children: [
32170
+ (offers?.giftCards.length ?? 0) > 0 ? /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32045
32171
  /* @__PURE__ */ jsx40("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.giftCardsHeading }),
32046
- /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.giftCards.map((offer) => /* @__PURE__ */ jsxs26(
32172
+ /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.giftCards.map((offer) => /* @__PURE__ */ jsxs27(
32047
32173
  "article",
32048
32174
  {
32049
32175
  style: {
@@ -32060,9 +32186,9 @@ function GiftingSSR({ blockId, ...rest }) {
32060
32186
  offer.id
32061
32187
  )) })
32062
32188
  ] }) : null,
32063
- (offers?.vouchers.length ?? 0) > 0 ? /* @__PURE__ */ jsxs26("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32189
+ (offers?.vouchers.length ?? 0) > 0 ? /* @__PURE__ */ jsxs27("div", { className: "rb-grid", style: { gap: "1rem" }, children: [
32064
32190
  /* @__PURE__ */ jsx40("h3", { style: { margin: 0, fontSize: "1.25rem", fontWeight: 700 }, children: islandProps.render.display.vouchersHeading }),
32065
- /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.vouchers.map((offer) => /* @__PURE__ */ jsxs26(
32191
+ /* @__PURE__ */ jsx40("div", { className: "rb-grid", style: { gap: "1rem" }, children: offers?.vouchers.map((offer) => /* @__PURE__ */ jsxs27(
32066
32192
  "article",
32067
32193
  {
32068
32194
  style: {
@@ -32090,10 +32216,10 @@ function GiftingSSR({ blockId, ...rest }) {
32090
32216
  var gifting_server_default = GiftingSSR;
32091
32217
 
32092
32218
  // ../blocks/src/system/runtime/nodes/events/EventListing.view.tsx
32093
- import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
32219
+ import { jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
32094
32220
  function EventListingFrameView(props2) {
32095
32221
  const { display, filters, emptyState: emptyState4, footer, renderEventCard: renderEventCard2 } = props2;
32096
- return /* @__PURE__ */ jsxs27("div", { className: `event-listing ${display.className ?? ""}`, "data-block": "event-listing", children: [
32222
+ return /* @__PURE__ */ jsxs28("div", { className: `event-listing ${display.className ?? ""}`, "data-block": "event-listing", children: [
32097
32223
  filters,
32098
32224
  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)) }),
32099
32225
  footer
@@ -32172,7 +32298,7 @@ function formatShortDayLabel(date) {
32172
32298
  }
32173
32299
 
32174
32300
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.server.tsx
32175
- import { jsx as jsx42, jsxs as jsxs28 } from "react/jsx-runtime";
32301
+ import { jsx as jsx42, jsxs as jsxs29 } from "react/jsx-runtime";
32176
32302
  function assertNeverDisplayMode(value) {
32177
32303
  throw new Error(`Unsupported event-calendar displayMode: ${String(value)}`);
32178
32304
  }
@@ -32184,8 +32310,8 @@ function renderEventCard(event, display) {
32184
32310
  }
32185
32311
  function renderCombinedSsr(display, prefetchedEvents) {
32186
32312
  const listDisplay = buildEventCalendarListingDisplay(display, prefetchedEvents, "event-combined-content");
32187
- return /* @__PURE__ */ jsxs28("div", { className: clsx_default("event-combined", display.className ?? void 0), "data-block": "event-combined", children: [
32188
- /* @__PURE__ */ jsxs28("div", { className: "nav-tabs", role: "tablist", children: [
32313
+ return /* @__PURE__ */ jsxs29("div", { className: clsx_default("event-combined", display.className ?? void 0), "data-block": "event-combined", children: [
32314
+ /* @__PURE__ */ jsxs29("div", { className: "nav-tabs", role: "tablist", children: [
32189
32315
  /* @__PURE__ */ jsx42(
32190
32316
  "button",
32191
32317
  {
@@ -32233,9 +32359,9 @@ function renderCalendarGrid(display) {
32233
32359
  const eventsByDate = groupEventsByDate([...display.events]);
32234
32360
  const dayNames = getOrderedDayNames(display.startOfWeek);
32235
32361
  const headerTitle = formatCalendarTitle(viewDate, calendarView, calendarDays);
32236
- return /* @__PURE__ */ jsxs28("div", { className: clsx_default("event-calendar", display.className ?? void 0), "data-block": "event-calendar", children: [
32237
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-header", children: [
32238
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-nav", children: [
32362
+ return /* @__PURE__ */ jsxs29("div", { className: clsx_default("event-calendar", display.className ?? void 0), "data-block": "event-calendar", children: [
32363
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-header", children: [
32364
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-nav", children: [
32239
32365
  /* @__PURE__ */ jsx42(
32240
32366
  "button",
32241
32367
  {
@@ -32268,7 +32394,7 @@ function renderCalendarGrid(display) {
32268
32394
  }
32269
32395
  )
32270
32396
  ] }),
32271
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-container", children: [
32397
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-container", children: [
32272
32398
  /* @__PURE__ */ jsx42("div", { className: "event-calendar-day-headers", children: dayNames.map((day) => /* @__PURE__ */ jsx42("div", { className: "event-calendar-day-header", children: day }, day)) }),
32273
32399
  /* @__PURE__ */ jsx42("div", { className: "event-calendar-grid", children: calendarDays.map((date) => {
32274
32400
  const dateKey = formatDateKey2(date);
@@ -32280,10 +32406,10 @@ function renderCalendarGrid(display) {
32280
32406
  !isCurrentMonth && "event-calendar-day--other-month",
32281
32407
  today && "event-calendar-day--today"
32282
32408
  );
32283
- return /* @__PURE__ */ jsxs28("div", { className: dayClasses, children: [
32409
+ return /* @__PURE__ */ jsxs29("div", { className: dayClasses, children: [
32284
32410
  /* @__PURE__ */ jsx42("div", { className: "event-calendar-day-number", children: date.getDate() }),
32285
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-events", children: [
32286
- dayEvents.slice(0, MAX_EVENTS_PER_DAY).map((event) => /* @__PURE__ */ jsxs28(
32411
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-events", children: [
32412
+ dayEvents.slice(0, MAX_EVENTS_PER_DAY).map((event) => /* @__PURE__ */ jsxs29(
32287
32413
  "a",
32288
32414
  {
32289
32415
  href: event.path,
@@ -32297,7 +32423,7 @@ function renderCalendarGrid(display) {
32297
32423
  },
32298
32424
  event.occurrenceId || event.id
32299
32425
  )),
32300
- dayEvents.length > MAX_EVENTS_PER_DAY ? /* @__PURE__ */ jsxs28("div", { className: "event-calendar-more", children: [
32426
+ dayEvents.length > MAX_EVENTS_PER_DAY ? /* @__PURE__ */ jsxs29("div", { className: "event-calendar-more", children: [
32301
32427
  "+",
32302
32428
  dayEvents.length - MAX_EVENTS_PER_DAY,
32303
32429
  " more"
@@ -32319,9 +32445,9 @@ function renderTimetableSsr(display) {
32319
32445
  const calendarDays = getWeekCalendarDays(viewDate, display.startOfWeek);
32320
32446
  const headerTitle = formatCalendarTitle(viewDate, "week", calendarDays);
32321
32447
  const selectedDayKey = model.days.find((day) => day.isToday)?.dateKey ?? model.days[0]?.dateKey ?? "";
32322
- return /* @__PURE__ */ jsxs28("div", { className: clsx_default("event-calendar", "event-calendar--timetable", display.className ?? void 0), "data-block": "event-calendar", children: [
32323
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-header", children: [
32324
- /* @__PURE__ */ jsxs28("div", { className: "event-calendar-nav", children: [
32448
+ return /* @__PURE__ */ jsxs29("div", { className: clsx_default("event-calendar", "event-calendar--timetable", display.className ?? void 0), "data-block": "event-calendar", children: [
32449
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-header", children: [
32450
+ /* @__PURE__ */ jsxs29("div", { className: "event-calendar-nav", children: [
32325
32451
  /* @__PURE__ */ jsx42(
32326
32452
  "button",
32327
32453
  {
@@ -32354,7 +32480,7 @@ function renderTimetableSsr(display) {
32354
32480
  }
32355
32481
  )
32356
32482
  ] }),
32357
- /* @__PURE__ */ jsxs28("div", { className: "event-timetable", children: [
32483
+ /* @__PURE__ */ jsxs29("div", { className: "event-timetable", children: [
32358
32484
  /* @__PURE__ */ jsx42("div", { className: "event-timetable-day-selector", "aria-label": "Choose timetable day", children: model.days.map((day) => /* @__PURE__ */ jsx42(
32359
32485
  "button",
32360
32486
  {
@@ -32367,8 +32493,8 @@ function renderTimetableSsr(display) {
32367
32493
  },
32368
32494
  day.dateKey
32369
32495
  )) }),
32370
- /* @__PURE__ */ jsx42("div", { className: "event-timetable-container", children: /* @__PURE__ */ jsxs28("div", { className: "event-timetable-grid", "aria-label": "Weekly timetable", children: [
32371
- /* @__PURE__ */ jsxs28("div", { className: "event-timetable-time-rail", "aria-hidden": "true", children: [
32496
+ /* @__PURE__ */ jsx42("div", { className: "event-timetable-container", children: /* @__PURE__ */ jsxs29("div", { className: "event-timetable-grid", "aria-label": "Weekly timetable", children: [
32497
+ /* @__PURE__ */ jsxs29("div", { className: "event-timetable-time-rail", "aria-hidden": "true", children: [
32372
32498
  /* @__PURE__ */ jsx42("div", { className: "event-timetable-day-heading" }),
32373
32499
  /* @__PURE__ */ jsx42("div", { className: "event-timetable-time-body", children: model.hourTicks.map((hour) => /* @__PURE__ */ jsx42(
32374
32500
  "div",
@@ -32380,7 +32506,7 @@ function renderTimetableSsr(display) {
32380
32506
  hour
32381
32507
  )) })
32382
32508
  ] }),
32383
- model.days.map((day) => /* @__PURE__ */ jsxs28(
32509
+ model.days.map((day) => /* @__PURE__ */ jsxs29(
32384
32510
  "section",
32385
32511
  {
32386
32512
  className: clsx_default(
@@ -32389,11 +32515,11 @@ function renderTimetableSsr(display) {
32389
32515
  ),
32390
32516
  "data-selected": day.dateKey === selectedDayKey ? "true" : "false",
32391
32517
  children: [
32392
- /* @__PURE__ */ jsxs28("h4", { className: "event-timetable-day-heading", children: [
32518
+ /* @__PURE__ */ jsxs29("h4", { className: "event-timetable-day-heading", children: [
32393
32519
  day.label,
32394
32520
  day.isToday ? /* @__PURE__ */ jsx42("span", { className: "event-timetable-today-badge", children: "Today" }) : null
32395
32521
  ] }),
32396
- /* @__PURE__ */ jsxs28(
32522
+ /* @__PURE__ */ jsxs29(
32397
32523
  "div",
32398
32524
  {
32399
32525
  className: "event-timetable-day-body",
@@ -32408,7 +32534,7 @@ function renderTimetableSsr(display) {
32408
32534
  },
32409
32535
  hour
32410
32536
  )),
32411
- day.events.length === 0 ? /* @__PURE__ */ jsx42("p", { className: "event-timetable-day-empty", children: "No classes" }) : day.events.map((cell) => /* @__PURE__ */ jsxs28(
32537
+ day.events.length === 0 ? /* @__PURE__ */ jsx42("p", { className: "event-timetable-day-empty", children: "No classes" }) : day.events.map((cell) => /* @__PURE__ */ jsxs29(
32412
32538
  "a",
32413
32539
  {
32414
32540
  href: cell.event.path,
@@ -32485,18 +32611,18 @@ var EventCalendarSSR = (props2) => {
32485
32611
  default:
32486
32612
  content = assertNeverDisplayMode(display.displayMode);
32487
32613
  }
32488
- return /* @__PURE__ */ jsxs28("div", { ...getIslandRootProps("event-calendar", props2.blockId), children: [
32614
+ return /* @__PURE__ */ jsxs29("div", { ...getIslandRootProps("event-calendar", props2.blockId), children: [
32489
32615
  /* @__PURE__ */ jsx42(IslandPropsScript, { value: islandProps }),
32490
32616
  content
32491
32617
  ] });
32492
32618
  };
32493
32619
 
32494
32620
  // ../blocks/src/system/runtime/nodes/events/EventListing.server.tsx
32495
- import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
32621
+ import { jsx as jsx43, jsxs as jsxs30 } from "react/jsx-runtime";
32496
32622
  var EventListingSSR = (props2) => {
32497
32623
  const islandProps = buildEventListingInteractiveIslandProps(props2);
32498
32624
  const display = islandProps.render.display;
32499
- return /* @__PURE__ */ jsxs29("div", { ...getIslandRootProps("event-listing", props2.blockId), children: [
32625
+ return /* @__PURE__ */ jsxs30("div", { ...getIslandRootProps("event-listing", props2.blockId), children: [
32500
32626
  /* @__PURE__ */ jsx43(IslandPropsScript, { value: islandProps }),
32501
32627
  /* @__PURE__ */ jsx43(
32502
32628
  EventListingFrameView,
@@ -32509,7 +32635,7 @@ var EventListingSSR = (props2) => {
32509
32635
  };
32510
32636
 
32511
32637
  // ../blocks/src/system/runtime/nodes/event-registration.server.tsx
32512
- import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
32638
+ import { jsx as jsx44, jsxs as jsxs31 } from "react/jsx-runtime";
32513
32639
  function EventRegistrationSSR({
32514
32640
  blockId,
32515
32641
  siteId,
@@ -32550,7 +32676,7 @@ function EventRegistrationSSR({
32550
32676
  stage,
32551
32677
  supportEmail
32552
32678
  });
32553
- return /* @__PURE__ */ jsxs30(
32679
+ return /* @__PURE__ */ jsxs31(
32554
32680
  "div",
32555
32681
  {
32556
32682
  className: `event-registration ${className ?? ""}`.trim(),
@@ -32566,7 +32692,7 @@ function EventRegistrationSSR({
32566
32692
  var event_registration_server_default = EventRegistrationSSR;
32567
32693
 
32568
32694
  // ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
32569
- import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
32695
+ import { jsx as jsx45, jsxs as jsxs32 } from "react/jsx-runtime";
32570
32696
  function joinClasses5(...parts) {
32571
32697
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
32572
32698
  }
@@ -32582,7 +32708,7 @@ function FeedbackMessage({
32582
32708
  }) {
32583
32709
  const resolvedLive = live ?? (role === "alert" ? "assertive" : "polite");
32584
32710
  const shouldWrapBody = Boolean(title || bodyClassName);
32585
- return /* @__PURE__ */ jsxs31(
32711
+ return /* @__PURE__ */ jsxs32(
32586
32712
  "div",
32587
32713
  {
32588
32714
  className,
@@ -32598,7 +32724,7 @@ function FeedbackMessage({
32598
32724
  }
32599
32725
 
32600
32726
  // ../blocks/src/system/runtime/nodes/form.server.tsx
32601
- import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
32727
+ import { jsx as jsx46, jsxs as jsxs33 } from "react/jsx-runtime";
32602
32728
  var FormNodeSSR = ({
32603
32729
  blockId,
32604
32730
  value,
@@ -32623,7 +32749,7 @@ var FormNodeSSR = ({
32623
32749
  const display = islandProps.render.display;
32624
32750
  const form2 = display.form;
32625
32751
  if (!form2) {
32626
- return /* @__PURE__ */ jsxs32("div", { ...getIslandRootProps("form", blockId), children: [
32752
+ return /* @__PURE__ */ jsxs33("div", { ...getIslandRootProps("form", blockId), children: [
32627
32753
  /* @__PURE__ */ jsx46(IslandPropsScript, { value: islandProps }),
32628
32754
  /* @__PURE__ */ jsx46(FeedbackMessage, { tone: "warning", className: clsx_default("fb-empty", className), role: "status", children: "Missing or unknown form." })
32629
32755
  ] });
@@ -32635,7 +32761,7 @@ var FormNodeSSR = ({
32635
32761
  const required = Boolean(field.required);
32636
32762
  const type = String(field.type ?? "text");
32637
32763
  if (type === "textarea") {
32638
- return /* @__PURE__ */ jsxs32("div", { className: "fb-field", children: [
32764
+ return /* @__PURE__ */ jsxs33("div", { className: "fb-field", children: [
32639
32765
  /* @__PURE__ */ jsx46("label", { htmlFor: inputId, className: "form-label", children: label }),
32640
32766
  /* @__PURE__ */ jsx46(
32641
32767
  "textarea",
@@ -32653,9 +32779,9 @@ var FormNodeSSR = ({
32653
32779
  if (type === "select") {
32654
32780
  const options = field.options ?? [];
32655
32781
  const multiple = Boolean(field.multiple);
32656
- return /* @__PURE__ */ jsxs32("div", { className: "fb-field", children: [
32782
+ return /* @__PURE__ */ jsxs33("div", { className: "fb-field", children: [
32657
32783
  /* @__PURE__ */ jsx46("label", { htmlFor: inputId, className: "form-label", children: label }),
32658
- /* @__PURE__ */ jsxs32("select", { id: inputId, name: field.id, multiple, required, className: "form-select", children: [
32784
+ /* @__PURE__ */ jsxs33("select", { id: inputId, name: field.id, multiple, required, className: "form-select", children: [
32659
32785
  !multiple && /* @__PURE__ */ jsx46("option", { value: "", children: "Select\u2026" }),
32660
32786
  options.map((opt) => /* @__PURE__ */ jsx46("option", { value: opt.value, children: opt.label }, opt.value))
32661
32787
  ] })
@@ -32663,9 +32789,9 @@ var FormNodeSSR = ({
32663
32789
  }
32664
32790
  if (type === "radio") {
32665
32791
  const options = field.options ?? [];
32666
- return /* @__PURE__ */ jsxs32("fieldset", { className: "fb-fieldset", children: [
32792
+ return /* @__PURE__ */ jsxs33("fieldset", { className: "fb-fieldset", children: [
32667
32793
  /* @__PURE__ */ jsx46("legend", { className: "form-label", children: label }),
32668
- options.map((opt) => /* @__PURE__ */ jsxs32("label", { className: "fb-inline form-label", children: [
32794
+ options.map((opt) => /* @__PURE__ */ jsxs33("label", { className: "fb-inline form-label", children: [
32669
32795
  /* @__PURE__ */ jsx46(
32670
32796
  "input",
32671
32797
  {
@@ -32681,7 +32807,7 @@ var FormNodeSSR = ({
32681
32807
  ] }, field.id);
32682
32808
  }
32683
32809
  if (type === "checkbox" || type === "consent") {
32684
- return /* @__PURE__ */ jsxs32("label", { className: "fb-inline form-label", children: [
32810
+ return /* @__PURE__ */ jsxs33("label", { className: "fb-inline form-label", children: [
32685
32811
  /* @__PURE__ */ jsx46("input", { type: "checkbox", name: field.id, required, className: "form-checkbox" }),
32686
32812
  /* @__PURE__ */ jsx46("span", { children: label })
32687
32813
  ] }, field.id);
@@ -32697,7 +32823,7 @@ var FormNodeSSR = ({
32697
32823
  if (typeof field.min === "number") extra.min = field.min;
32698
32824
  if (typeof field.max === "number") extra.max = field.max;
32699
32825
  }
32700
- return /* @__PURE__ */ jsxs32("div", { className: "fb-field", children: [
32826
+ return /* @__PURE__ */ jsxs33("div", { className: "fb-field", children: [
32701
32827
  /* @__PURE__ */ jsx46("label", { htmlFor: inputId, className: "form-label", children: label }),
32702
32828
  /* @__PURE__ */ jsx46(
32703
32829
  "input",
@@ -32713,9 +32839,9 @@ var FormNodeSSR = ({
32713
32839
  )
32714
32840
  ] }, field.id);
32715
32841
  };
32716
- return /* @__PURE__ */ jsxs32("div", { ...getIslandRootProps("form", blockId), children: [
32842
+ return /* @__PURE__ */ jsxs33("div", { ...getIslandRootProps("form", blockId), children: [
32717
32843
  /* @__PURE__ */ jsx46(IslandPropsScript, { value: islandProps }),
32718
- /* @__PURE__ */ jsxs32(
32844
+ /* @__PURE__ */ jsxs33(
32719
32845
  "form",
32720
32846
  {
32721
32847
  method: "POST",
@@ -32750,7 +32876,7 @@ var FormNodeSSR = ({
32750
32876
  };
32751
32877
 
32752
32878
  // ../blocks/src/system/runtime/nodes/newsletter-form.server.tsx
32753
- import { jsx as jsx47, jsxs as jsxs33 } from "react/jsx-runtime";
32879
+ import { jsx as jsx47, jsxs as jsxs34 } from "react/jsx-runtime";
32754
32880
  function NewsletterFormSSR({
32755
32881
  blockId,
32756
32882
  siteId,
@@ -32782,8 +32908,8 @@ function NewsletterFormSSR({
32782
32908
  const fields3 = display.fields;
32783
32909
  const renderField = (field) => {
32784
32910
  const inputId = `newsletter_${field.id}`;
32785
- return /* @__PURE__ */ jsxs33("div", { className: "fb-field newsletter-field", children: [
32786
- /* @__PURE__ */ jsxs33("label", { htmlFor: inputId, className: "form-label", children: [
32911
+ return /* @__PURE__ */ jsxs34("div", { className: "fb-field newsletter-field", children: [
32912
+ /* @__PURE__ */ jsxs34("label", { htmlFor: inputId, className: "form-label", children: [
32787
32913
  field.label,
32788
32914
  field.required && /* @__PURE__ */ jsx47("span", { className: "newsletter-required", "aria-hidden": "true", children: "*" })
32789
32915
  ] }),
@@ -32801,14 +32927,14 @@ function NewsletterFormSSR({
32801
32927
  )
32802
32928
  ] }, field.id);
32803
32929
  };
32804
- return /* @__PURE__ */ jsxs33(
32930
+ return /* @__PURE__ */ jsxs34(
32805
32931
  "div",
32806
32932
  {
32807
32933
  ...getIslandRootProps("newsletter-form", blockId),
32808
32934
  className: clsx_default("newsletter-form-ssr", className),
32809
32935
  children: [
32810
32936
  /* @__PURE__ */ jsx47(IslandPropsScript, { value: islandProps }),
32811
- /* @__PURE__ */ jsxs33("form", { method: "POST", className: "newsletter-form fb-form", children: [
32937
+ /* @__PURE__ */ jsxs34("form", { method: "POST", className: "newsletter-form fb-form", children: [
32812
32938
  /* @__PURE__ */ jsx47(
32813
32939
  "input",
32814
32940
  {
@@ -32820,7 +32946,7 @@ function NewsletterFormSSR({
32820
32946
  "aria-hidden": "true"
32821
32947
  }
32822
32948
  ),
32823
- /* @__PURE__ */ jsxs33("div", { className: "newsletter-form-fields", children: [
32949
+ /* @__PURE__ */ jsxs34("div", { className: "newsletter-form-fields", children: [
32824
32950
  fields3.map(renderField),
32825
32951
  /* @__PURE__ */ jsx47("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx47(
32826
32952
  "button",
@@ -32840,7 +32966,7 @@ function NewsletterFormSSR({
32840
32966
  var newsletter_form_server_default = NewsletterFormSSR;
32841
32967
 
32842
32968
  // ../blocks/src/system/runtime/nodes/product-detail.server.tsx
32843
- import { jsx as jsx48, jsxs as jsxs34 } from "react/jsx-runtime";
32969
+ import { jsx as jsx48, jsxs as jsxs35 } from "react/jsx-runtime";
32844
32970
  function ProductDetailSSR({
32845
32971
  blockId,
32846
32972
  siteId,
@@ -32855,7 +32981,7 @@ function ProductDetailSSR({
32855
32981
  stage,
32856
32982
  ...rest
32857
32983
  });
32858
- return /* @__PURE__ */ jsxs34(
32984
+ return /* @__PURE__ */ jsxs35(
32859
32985
  "div",
32860
32986
  {
32861
32987
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -32875,7 +33001,7 @@ function ProductDetailSSR({
32875
33001
  var product_detail_server_default = ProductDetailSSR;
32876
33002
 
32877
33003
  // ../blocks/src/system/runtime/nodes/product-list.server.tsx
32878
- import { jsx as jsx49, jsxs as jsxs35 } from "react/jsx-runtime";
33004
+ import { jsx as jsx49, jsxs as jsxs36 } from "react/jsx-runtime";
32879
33005
  function ProductListSSR({
32880
33006
  blockId,
32881
33007
  siteId,
@@ -32890,7 +33016,7 @@ function ProductListSSR({
32890
33016
  stage,
32891
33017
  ...rest
32892
33018
  });
32893
- return /* @__PURE__ */ jsxs35(
33019
+ return /* @__PURE__ */ jsxs36(
32894
33020
  "div",
32895
33021
  {
32896
33022
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -32910,7 +33036,7 @@ function ProductListSSR({
32910
33036
  var product_list_server_default = ProductListSSR;
32911
33037
 
32912
33038
  // ../blocks/src/system/runtime/nodes/shop.server.tsx
32913
- import { jsx as jsx50, jsxs as jsxs36 } from "react/jsx-runtime";
33039
+ import { jsx as jsx50, jsxs as jsxs37 } from "react/jsx-runtime";
32914
33040
  function ShopSSR({
32915
33041
  blockId,
32916
33042
  siteId,
@@ -32927,7 +33053,7 @@ function ShopSSR({
32927
33053
  ...rest
32928
33054
  });
32929
33055
  const render = islandProps.render;
32930
- return /* @__PURE__ */ jsxs36(
33056
+ return /* @__PURE__ */ jsxs37(
32931
33057
  "div",
32932
33058
  {
32933
33059
  className: `shop ${rest.className ?? ""}`.trim(),
@@ -46672,6 +46798,11 @@ var containerResponsiveThemeCss = `/*
46672
46798
  * Dense row layout for event-calendar compact list mode
46673
46799
  * ============================================================================= */
46674
46800
 
46801
+ :where(.theme-scope) .event-listing-compact-container {
46802
+ width: min(100%, 56rem);
46803
+ margin-inline: auto;
46804
+ }
46805
+
46675
46806
  :where(.theme-scope) .event-compact-row {
46676
46807
  display: flex;
46677
46808
  align-items: center;
@@ -46797,7 +46928,7 @@ var containerResponsiveThemeCss = `/*
46797
46928
  }`;
46798
46929
 
46799
46930
  // ../theme-core/src/ThemeScopeCore.tsx
46800
- import { jsx as jsx52, jsxs as jsxs37 } from "react/jsx-runtime";
46931
+ import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
46801
46932
  function ThemeScopeCore({
46802
46933
  cssVars,
46803
46934
  buttonCss,
@@ -46829,7 +46960,7 @@ function ThemeScopeCore({
46829
46960
  containerType: "inline-size",
46830
46961
  containerName: responsiveScope.containerName
46831
46962
  } : cssVars;
46832
- return /* @__PURE__ */ jsxs37(
46963
+ return /* @__PURE__ */ jsxs38(
46833
46964
  "div",
46834
46965
  {
46835
46966
  className: className ? `theme-scope ${className}` : "theme-scope",
@@ -47047,10 +47178,10 @@ function resolveFooterRenderPlan(params) {
47047
47178
 
47048
47179
  // ../theme-core/src/ThemeFontLoader.tsx
47049
47180
  import * as React7 from "react";
47050
- import { Fragment as Fragment7, jsx as jsx54, jsxs as jsxs38 } from "react/jsx-runtime";
47181
+ import { Fragment as Fragment7, jsx as jsx54, jsxs as jsxs39 } from "react/jsx-runtime";
47051
47182
 
47052
47183
  // ../theme-core/src/siteChrome.tsx
47053
- import { Fragment as Fragment8, jsx as jsx55, jsxs as jsxs39 } from "react/jsx-runtime";
47184
+ import { Fragment as Fragment8, jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
47054
47185
 
47055
47186
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
47056
47187
  import { z as z64 } from "zod";
@@ -47084,10 +47215,10 @@ var themeBridgeConfigSchema = z64.object({
47084
47215
  }).passthrough();
47085
47216
 
47086
47217
  // ../theme-core/src/mock-themes/components/swatch.tsx
47087
- import { jsx as jsx56, jsxs as jsxs40 } from "react/jsx-runtime";
47218
+ import { jsx as jsx56, jsxs as jsxs41 } from "react/jsx-runtime";
47088
47219
 
47089
47220
  // ../theme-core/src/mock-themes/components/PaletteCard.tsx
47090
- import { jsx as jsx57, jsxs as jsxs41 } from "react/jsx-runtime";
47221
+ import { jsx as jsx57, jsxs as jsxs42 } from "react/jsx-runtime";
47091
47222
 
47092
47223
  // src/rendering/blocks-theme-runtime.ts
47093
47224
  var AXES_TONE_OPTIONS = ["minimal", "classic", "bold"];
@@ -47259,10 +47390,10 @@ function PageContent({
47259
47390
  }
47260
47391
 
47261
47392
  // src/rendering/components/Page.tsx
47262
- import { Fragment as Fragment9, jsx as jsx59, jsxs as jsxs42 } from "react/jsx-runtime";
47393
+ import { Fragment as Fragment9, jsx as jsx59, jsxs as jsxs43 } from "react/jsx-runtime";
47263
47394
  var HydratorWithContextProps = BlocksIslandsHydrator;
47264
47395
  function Page(props2) {
47265
- return /* @__PURE__ */ jsxs42(Fragment9, { children: [
47396
+ return /* @__PURE__ */ jsxs43(Fragment9, { children: [
47266
47397
  /* @__PURE__ */ jsx59(HydratorWithContextProps, { ...toPageHydrationBootstrapConfig(props2) }),
47267
47398
  /* @__PURE__ */ jsx59(PageContent, { ...props2 })
47268
47399
  ] });
@@ -47702,7 +47833,7 @@ function buildLogo(logo, fallbackAlt) {
47702
47833
  }
47703
47834
 
47704
47835
  // src/rendering/components/Layout.tsx
47705
- import { Fragment as Fragment10, jsx as jsx60, jsxs as jsxs43 } from "react/jsx-runtime";
47836
+ import { Fragment as Fragment10, jsx as jsx60, jsxs as jsxs44 } from "react/jsx-runtime";
47706
47837
  async function Layout({
47707
47838
  siteData: providedSiteData,
47708
47839
  client,
@@ -47837,14 +47968,14 @@ async function Layout({
47837
47968
  themeConfig: blocksTheme,
47838
47969
  viewModelOverrides
47839
47970
  }) : null;
47840
- footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs43(Fragment10, { children: [
47971
+ footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs44(Fragment10, { children: [
47841
47972
  footerBlocksElement,
47842
47973
  defaultFooterElement
47843
47974
  ] }) : footerPlan.mode === "blocks" ? footerBlocksElement : footerPlan.mode === "none" ? null : defaultFooterElement;
47844
47975
  } else if (typeof footer === "function") {
47845
47976
  footerElement = footer(footerData);
47846
47977
  }
47847
- const content = /* @__PURE__ */ jsxs43(Fragment10, { children: [
47978
+ const content = /* @__PURE__ */ jsxs44(Fragment10, { children: [
47848
47979
  headerElement,
47849
47980
  children,
47850
47981
  footerElement
@@ -49106,6 +49237,18 @@ var TAG_TEMPLATES = {
49106
49237
  siteForms: "riverbank:site:{siteId}:forms",
49107
49238
  formById: "riverbank:form:{formId}",
49108
49239
  formSubmissionsBySlug: "riverbank:form-submissions:{slug}",
49240
+ // Public data loaders
49241
+ publicEvents: "riverbank:site:{siteId}:public-events",
49242
+ publicEventFilters: "riverbank:site:{siteId}:public-event-filters",
49243
+ publicCourses: "riverbank:site:{siteId}:public-courses",
49244
+ publicTeamMembers: "riverbank:site:{siteId}:public-team-members",
49245
+ publicProducts: "riverbank:site:{siteId}:public-products",
49246
+ publicPasses: "riverbank:site:{siteId}:public-passes",
49247
+ publicMemberships: "riverbank:site:{siteId}:public-memberships",
49248
+ publicGifting: "riverbank:site:{siteId}:public-gifting",
49249
+ publicShop: "riverbank:site:{siteId}:public-shop",
49250
+ publicCheckout: "riverbank:site:{siteId}:public-checkout",
49251
+ publicBookingServices: "riverbank:site:{siteId}:public-booking-services",
49109
49252
  // Navigation
49110
49253
  siteNavigation: "riverbank:site:{siteId}:navigation",
49111
49254
  navigationMenuById: "riverbank:navigation-menu:{menuId}",
@@ -52792,7 +52935,7 @@ var ENDPOINT_DEFINITIONS = {
52792
52935
  path: "/public/sites/{siteId}/events",
52793
52936
  method: "GET",
52794
52937
  revalidate: 60,
52795
- tags: ["public-events-{siteId}"],
52938
+ tags: [TAG_TEMPLATES.publicEvents],
52796
52939
  auth: "public",
52797
52940
  responseKind: "json"
52798
52941
  },
@@ -52801,7 +52944,7 @@ var ENDPOINT_DEFINITIONS = {
52801
52944
  path: "/public/sites/{siteId}/events/filters",
52802
52945
  method: "GET",
52803
52946
  revalidate: 60,
52804
- tags: ["public-event-filters-{siteId}"],
52947
+ tags: [TAG_TEMPLATES.publicEventFilters],
52805
52948
  auth: "public",
52806
52949
  responseKind: "json"
52807
52950
  },
@@ -52810,7 +52953,7 @@ var ENDPOINT_DEFINITIONS = {
52810
52953
  path: "/public/sites/{siteId}/courses",
52811
52954
  method: "GET",
52812
52955
  revalidate: 60,
52813
- tags: ["public-courses-{siteId}"],
52956
+ tags: [TAG_TEMPLATES.publicCourses],
52814
52957
  auth: "public",
52815
52958
  responseKind: "json"
52816
52959
  },
@@ -52818,7 +52961,7 @@ var ENDPOINT_DEFINITIONS = {
52818
52961
  path: "/public/sites/{siteId}/team-members",
52819
52962
  method: "GET",
52820
52963
  revalidate: 60,
52821
- tags: ["public-team-members-{siteId}"],
52964
+ tags: [TAG_TEMPLATES.publicTeamMembers],
52822
52965
  errors: [],
52823
52966
  auth: "public",
52824
52967
  responseKind: "json"
@@ -52827,21 +52970,21 @@ var ENDPOINT_DEFINITIONS = {
52827
52970
  path: "/public/sites/{siteId}/courses/{courseId}",
52828
52971
  method: "GET",
52829
52972
  revalidate: 60,
52830
- tags: ["public-courses-{siteId}"],
52973
+ tags: [TAG_TEMPLATES.publicCourses],
52831
52974
  auth: "public",
52832
52975
  responseKind: "json"
52833
52976
  },
52834
52977
  enrollInCourse: {
52835
52978
  path: "/public/sites/{siteId}/courses/enroll",
52836
52979
  method: "POST",
52837
- tags: ["public-courses-{siteId}", "course-enrollment"],
52980
+ tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
52838
52981
  auth: "public",
52839
52982
  responseKind: "json"
52840
52983
  },
52841
52984
  checkCourseEligibility: {
52842
52985
  path: "/public/sites/{siteId}/courses/check-eligibility",
52843
52986
  method: "POST",
52844
- tags: ["public-courses-{siteId}", "course-enrollment"],
52987
+ tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
52845
52988
  auth: "public",
52846
52989
  responseKind: "json"
52847
52990
  },
@@ -52849,8 +52992,8 @@ var ENDPOINT_DEFINITIONS = {
52849
52992
  path: "/public/sites/{siteId}/waitlists/claim/resolve",
52850
52993
  method: "POST",
52851
52994
  tags: [
52852
- "public-courses-{siteId}",
52853
- "public-events-{siteId}",
52995
+ TAG_TEMPLATES.publicCourses,
52996
+ TAG_TEMPLATES.publicEvents,
52854
52997
  "waitlist-claims"
52855
52998
  ],
52856
52999
  auth: "public",
@@ -52865,7 +53008,7 @@ var ENDPOINT_DEFINITIONS = {
52865
53008
  createCourseCheckout: {
52866
53009
  path: "/public/sites/{siteId}/courses/checkout",
52867
53010
  method: "POST",
52868
- tags: ["public-courses-{siteId}", "course-checkout"],
53011
+ tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
52869
53012
  auth: "public",
52870
53013
  responseKind: "json",
52871
53014
  errors: [
@@ -52879,7 +53022,7 @@ var ENDPOINT_DEFINITIONS = {
52879
53022
  getCourseRegistrationStatus: {
52880
53023
  path: "/public/sites/{siteId}/courses/registration-status",
52881
53024
  method: "GET",
52882
- tags: ["public-courses-{siteId}", "course-checkout"],
53025
+ tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
52883
53026
  auth: "public",
52884
53027
  responseKind: "json"
52885
53028
  },
@@ -52888,7 +53031,7 @@ var ENDPOINT_DEFINITIONS = {
52888
53031
  path: "/public/sites/{siteId}/bookings/products/passes",
52889
53032
  method: "GET",
52890
53033
  revalidate: 300,
52891
- tags: ["public-passes-{siteId}"],
53034
+ tags: [TAG_TEMPLATES.publicPasses],
52892
53035
  auth: "public",
52893
53036
  responseKind: "json"
52894
53037
  },
@@ -52897,7 +53040,7 @@ var ENDPOINT_DEFINITIONS = {
52897
53040
  path: "/public/sites/{siteId}/bookings/products/memberships",
52898
53041
  method: "GET",
52899
53042
  revalidate: 300,
52900
- tags: ["public-memberships-{siteId}"],
53043
+ tags: [TAG_TEMPLATES.publicMemberships],
52901
53044
  auth: "public",
52902
53045
  responseKind: "json"
52903
53046
  },
@@ -52906,7 +53049,7 @@ var ENDPOINT_DEFINITIONS = {
52906
53049
  path: "/public/sites/{siteId}/products",
52907
53050
  method: "GET",
52908
53051
  revalidate: 300,
52909
- tags: ["public-products-{siteId}"],
53052
+ tags: [TAG_TEMPLATES.publicProducts],
52910
53053
  errors: [],
52911
53054
  auth: "public",
52912
53055
  responseKind: "json"
@@ -52915,7 +53058,7 @@ var ENDPOINT_DEFINITIONS = {
52915
53058
  path: "/public/sites/{siteId}/gifting/offers",
52916
53059
  method: "GET",
52917
53060
  revalidate: 300,
52918
- tags: ["public-gifting-{siteId}"],
53061
+ tags: [TAG_TEMPLATES.publicGifting],
52919
53062
  errors: [],
52920
53063
  auth: "public",
52921
53064
  responseKind: "json"
@@ -52923,7 +53066,7 @@ var ENDPOINT_DEFINITIONS = {
52923
53066
  createPublicGiftingCheckout: {
52924
53067
  path: "/public/sites/{siteId}/gifting/checkout",
52925
53068
  method: "POST",
52926
- tags: ["public-gifting-{siteId}"],
53069
+ tags: [TAG_TEMPLATES.publicGifting],
52927
53070
  errors: [],
52928
53071
  auth: "public",
52929
53072
  responseKind: "json"
@@ -52931,7 +53074,7 @@ var ENDPOINT_DEFINITIONS = {
52931
53074
  claimGiftCardPublic: {
52932
53075
  path: "/public/sites/{siteId}/gifting/claim",
52933
53076
  method: "POST",
52934
- tags: ["public-gifting-{siteId}"],
53077
+ tags: [TAG_TEMPLATES.publicGifting],
52935
53078
  errors: [],
52936
53079
  auth: "public",
52937
53080
  responseKind: "json"
@@ -52939,14 +53082,14 @@ var ENDPOINT_DEFINITIONS = {
52939
53082
  createShopCheckout: {
52940
53083
  path: "/public/sites/{siteId}/bookings/checkout",
52941
53084
  method: "POST",
52942
- tags: ["public-shop-{siteId}", "shop-checkout"],
53085
+ tags: [TAG_TEMPLATES.publicShop, "shop-checkout"],
52943
53086
  auth: "public",
52944
53087
  responseKind: "json"
52945
53088
  },
52946
53089
  createUnifiedCheckout: {
52947
53090
  path: "/public/sites/{siteId}/checkout",
52948
53091
  method: "POST",
52949
- tags: ["public-checkout-{siteId}"],
53092
+ tags: [TAG_TEMPLATES.publicCheckout],
52950
53093
  auth: "public",
52951
53094
  responseKind: "json",
52952
53095
  errors: [
@@ -52985,7 +53128,7 @@ var ENDPOINT_DEFINITIONS = {
52985
53128
  path: "/public/sites/{siteId}/events/occurrences/resolve",
52986
53129
  method: "GET",
52987
53130
  revalidate: 60,
52988
- tags: ["public-events-{siteId}", "event-occurrence"],
53131
+ tags: [TAG_TEMPLATES.publicEvents, "event-occurrence"],
52989
53132
  auth: "public",
52990
53133
  responseKind: "json"
52991
53134
  },
@@ -52993,7 +53136,7 @@ var ENDPOINT_DEFINITIONS = {
52993
53136
  registerForEvent: {
52994
53137
  path: "/public/sites/{siteId}/events/register",
52995
53138
  method: "POST",
52996
- tags: ["public-events-{siteId}", "event-registration"],
53139
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration"],
52997
53140
  auth: "public",
52998
53141
  responseKind: "json"
52999
53142
  },
@@ -53001,7 +53144,7 @@ var ENDPOINT_DEFINITIONS = {
53001
53144
  createPublicEventCheckout: {
53002
53145
  path: "/public/sites/{siteId}/events/checkout",
53003
53146
  method: "POST",
53004
- tags: ["public-events-{siteId}", "event-checkout"],
53147
+ tags: [TAG_TEMPLATES.publicEvents, "event-checkout"],
53005
53148
  auth: "public",
53006
53149
  responseKind: "json"
53007
53150
  },
@@ -53009,7 +53152,7 @@ var ENDPOINT_DEFINITIONS = {
53009
53152
  checkPublicEventEligibility: {
53010
53153
  path: "/public/sites/{siteId}/events/check-eligibility",
53011
53154
  method: "POST",
53012
- tags: ["public-events-{siteId}", "event-eligibility"],
53155
+ tags: [TAG_TEMPLATES.publicEvents, "event-eligibility"],
53013
53156
  auth: "public",
53014
53157
  responseKind: "json"
53015
53158
  },
@@ -53017,7 +53160,7 @@ var ENDPOINT_DEFINITIONS = {
53017
53160
  getPublicEventRegistrationStatus: {
53018
53161
  path: "/public/sites/{siteId}/events/registration-status",
53019
53162
  method: "GET",
53020
- tags: ["public-events-{siteId}", "event-registration"],
53163
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration"],
53021
53164
  auth: "public",
53022
53165
  responseKind: "json"
53023
53166
  },
@@ -53025,7 +53168,7 @@ var ENDPOINT_DEFINITIONS = {
53025
53168
  getPublicEventTicketQrSvg: {
53026
53169
  path: "/public/sites/{siteId}/events/tickets/qr",
53027
53170
  method: "GET",
53028
- tags: ["public-events-{siteId}", "event-ticket-qr"],
53171
+ tags: [TAG_TEMPLATES.publicEvents, "event-ticket-qr"],
53029
53172
  auth: "public",
53030
53173
  responseKind: "text"
53031
53174
  },
@@ -56313,10 +56456,10 @@ var MultiPageUpdateResponse = z71.object({
56313
56456
  });
56314
56457
 
56315
56458
  // src/rendering/components/Block.shared.tsx
56316
- import { jsx as jsx61, jsxs as jsxs44 } from "react/jsx-runtime";
56459
+ import { jsx as jsx61, jsxs as jsxs45 } from "react/jsx-runtime";
56317
56460
 
56318
56461
  // src/rendering/components/Block.tsx
56319
- import { Fragment as Fragment11, jsx as jsx62, jsxs as jsxs45 } from "react/jsx-runtime";
56462
+ import { Fragment as Fragment11, jsx as jsx62, jsxs as jsxs46 } from "react/jsx-runtime";
56320
56463
 
56321
56464
  // src/contracts/bindings.ts
56322
56465
  var BINDING_TRANSFORMS = {