@riverbankcms/sdk 0.77.1 → 0.78.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 (230) hide show
  1. package/README.md +69 -0
  2. package/dist/{PreviewEditorSidebar-DVUG7GK4.mjs → PreviewEditorSidebar-RIKFQ72L.mjs} +4916 -4847
  3. package/dist/{PreviewEditorUI-P7RN4CDS.mjs → PreviewEditorUI-XO7TUWKK.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-LAGYMPNF.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +154 -154
  6. package/dist/_dts/api/src/accessAdmin.d.ts +5 -0
  7. package/dist/_dts/api/src/billing.d.ts +3 -26
  8. package/dist/_dts/api/src/bookingVerticals.d.ts +4 -0
  9. package/dist/_dts/api/src/content-editor.d.ts +1 -0
  10. package/dist/_dts/api/src/demoDashboardMutationSurfaces.d.ts +46 -0
  11. package/dist/_dts/api/src/endpoints.d.ts +8 -0
  12. package/dist/_dts/api/src/index.d.ts +14 -2
  13. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +87 -0
  14. package/dist/_dts/api/src/navigation/dashboardDemoNav.d.ts +5 -0
  15. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +45 -0
  16. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +42 -0
  17. package/dist/_dts/api/src/navigation/dashboardTeamMemberNav.d.ts +24 -0
  18. package/dist/_dts/api/src/navigation/linkUrlType.d.ts +3 -0
  19. package/dist/_dts/api/src/navigation.d.ts +12 -0
  20. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +55 -26
  21. package/dist/_dts/api/src/staffAccess.d.ts +79 -0
  22. package/dist/_dts/api/src/types.d.ts +3 -1
  23. package/dist/_dts/api/src/workflows/automaticWorkflowTriggers.d.ts +21 -0
  24. package/dist/_dts/blocks/src/client/site-chrome.d.ts +4 -1
  25. package/dist/_dts/blocks/src/index.d.ts +1 -0
  26. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  27. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  28. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  29. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  30. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  31. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
  32. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +294 -289
  33. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  34. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +21 -21
  36. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  37. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  38. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  39. package/dist/_dts/blocks/src/system/data/index.d.ts +5 -3
  40. package/dist/_dts/blocks/src/system/data/previewResolvedDataState.d.ts +45 -0
  41. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +2 -1
  42. package/dist/_dts/blocks/src/system/fragments/library/faqAccordion.d.ts +5 -0
  43. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -29
  44. package/dist/_dts/blocks/src/system/node/fragments/headingDecoration.d.ts +10 -0
  45. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  46. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +9 -0
  47. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +3 -2
  48. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  49. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +43 -8
  51. package/dist/_dts/blocks/src/system/runtime/header/shared.d.ts +8 -7
  52. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCompactRow.d.ts +1 -4
  53. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +7 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +2 -8
  55. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +2 -9
  56. package/dist/_dts/blocks/src/system/runtime/nodes/shop-cart-discount-ui.d.ts +5 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout-form.d.ts +76 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout.state.d.ts +1 -4
  59. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce-store.d.ts +2 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce.shared.d.ts +1 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/shop-discount-apply.state.d.ts +52 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/shop.state.d.ts +2 -4
  63. package/dist/_dts/blocks/src/system/runtime/nodes/useDiscountApply.d.ts +21 -0
  64. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +54 -0
  65. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  66. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  67. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  68. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
  69. package/dist/_dts/content-editor/src/contentTypeEditorContentState.d.ts +26 -0
  70. package/dist/_dts/content-editor/src/definitions/factory.d.ts +75 -0
  71. package/dist/_dts/content-editor/src/entryWorkflows.d.ts +2 -0
  72. package/dist/_dts/content-editor/src/footerBlocksEditorState.d.ts +76 -0
  73. package/dist/_dts/content-editor/src/index.d.ts +5 -0
  74. package/dist/_dts/content-editor/src/pageWorkflowContent.d.ts +29 -0
  75. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  76. package/dist/_dts/content-model/src/index.d.ts +1 -0
  77. package/dist/_dts/content-model/src/routeTemplate.d.ts +4 -0
  78. package/dist/_dts/content-model/src/templates/editorState.d.ts +25 -0
  79. package/dist/_dts/core/src/csv-cells.d.ts +10 -0
  80. package/dist/_dts/core/src/csv-date-filter.d.ts +27 -0
  81. package/dist/_dts/core/src/csv-escape.d.ts +1 -0
  82. package/dist/_dts/core/src/csv-filename.d.ts +18 -0
  83. package/dist/_dts/core/src/csv-render.d.ts +4 -0
  84. package/dist/_dts/core/src/csv-types.d.ts +116 -0
  85. package/dist/_dts/core/src/currency-format.d.ts +4 -0
  86. package/dist/_dts/core/src/demo-capability-policy.d.ts +29 -0
  87. package/dist/_dts/core/src/demo-claim-access.d.ts +14 -0
  88. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +11 -0
  89. package/dist/_dts/core/src/demo-runtime.d.ts +47 -0
  90. package/dist/_dts/core/src/duration.d.ts +14 -0
  91. package/dist/_dts/core/src/email-format.d.ts +10 -0
  92. package/dist/_dts/core/src/field-errors.d.ts +1 -0
  93. package/dist/_dts/core/src/form-submission-preview.d.ts +24 -0
  94. package/dist/_dts/core/src/index.d.ts +20 -0
  95. package/dist/_dts/core/src/number-input.d.ts +22 -0
  96. package/dist/_dts/core/src/public-url-validation.d.ts +12 -0
  97. package/dist/_dts/core/src/slug.d.ts +39 -0
  98. package/dist/_dts/core/src/string.d.ts +19 -0
  99. package/dist/_dts/core/src/uuid.d.ts +6 -0
  100. package/dist/_dts/db/src/schemas/forms.d.ts +50 -50
  101. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +34 -0
  102. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +24 -0
  103. package/dist/_dts/media-core/src/canonicalCropReview.d.ts +66 -0
  104. package/dist/_dts/media-core/src/classifyAllPlanning.d.ts +48 -0
  105. package/dist/_dts/media-core/src/filename.d.ts +1 -0
  106. package/dist/_dts/media-core/src/index.d.ts +10 -0
  107. package/dist/_dts/media-core/src/mediaAssetUsageStatus.d.ts +47 -0
  108. package/dist/_dts/media-core/src/mediaSettingsState.d.ts +3 -0
  109. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +38 -0
  110. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +28 -0
  111. package/dist/_dts/media-core/src/videoAssetRepair.d.ts +38 -0
  112. package/dist/_dts/media-editor/src/mediaEditorDebug.d.ts +1 -0
  113. package/dist/_dts/path-utils/src/index.d.ts +8 -0
  114. package/dist/_dts/path-utils/src/redirectPaths.d.ts +26 -0
  115. package/dist/_dts/path-utils/src/safeAppPath.d.ts +26 -0
  116. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +2 -1
  117. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -0
  118. package/dist/_dts/preview-next/src/client/preview/previewDocumentFrame.d.ts +31 -0
  119. package/dist/_dts/sdk/src/client/error.d.ts +3 -0
  120. package/dist/_dts/sdk/src/client/index.d.ts +2 -2
  121. package/dist/_dts/sdk/src/client/types.d.ts +37 -19
  122. package/dist/_dts/sdk/src/index.d.ts +2 -2
  123. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +16 -16
  124. package/dist/_dts/sdk/src/next/content-load-failure.d.ts +51 -0
  125. package/dist/_dts/sdk/src/next/index.d.ts +2 -1
  126. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  127. package/dist/_dts/sdk/src/portal/redirects.d.ts +1 -1
  128. package/dist/_dts/sdk/src/routing/index.d.ts +3 -2
  129. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +71 -6
  130. package/dist/_dts/sdk/src/version.d.ts +1 -1
  131. package/dist/_dts/site-commands/src/commands.d.ts +12 -12
  132. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  133. package/dist/_dts/site-commands/src/pagePaths.d.ts +6 -0
  134. package/dist/_dts/theme-core/src/accordions/siteStyleDefaults.d.ts +26 -0
  135. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -0
  136. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +1 -0
  137. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -0
  138. package/dist/_dts/theme-core/src/fonts/uploadFormat.d.ts +44 -0
  139. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  140. package/dist/_dts/theme-core/src/index.d.ts +3 -1
  141. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -24
  142. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +6 -1
  143. package/dist/_dts/theme-core/src/navigation/types.d.ts +12 -0
  144. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  145. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +7 -0
  146. package/dist/_dts/theme-core/src/schema.d.ts +64 -18
  147. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +214 -34
  148. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -2
  149. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +214 -34
  150. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +24 -0
  151. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +31 -3
  152. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  153. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +33 -1
  154. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +4 -2
  155. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -1
  156. package/dist/_dts/theme-core/src/site-styles/types.d.ts +27 -2
  157. package/dist/_dts/theme-core/src/siteChrome.d.ts +17 -34
  158. package/dist/_dts/theme-core/src/siteChromeOverlayClearance.d.ts +22 -0
  159. package/dist/_dts/theme-core/src/siteChromePlacement.d.ts +22 -0
  160. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +32 -0
  161. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  162. package/dist/{chunk-2SPENC5M.mjs → chunk-F7RTCZYN.mjs} +229 -50
  163. package/dist/{chunk-IENWFSLO.mjs → chunk-NIDXI46P.mjs} +1 -1
  164. package/dist/{chunk-KWJPDZH2.mjs → chunk-OECWLDHN.mjs} +2770 -620
  165. package/dist/{chunk-VX7B5VAC.mjs → chunk-SVMMM2NA.mjs} +8 -0
  166. package/dist/{chunk-6SMUFTXD.mjs → chunk-SXOLGNMX.mjs} +1 -1
  167. package/dist/{chunk-ZYEJLCTN.mjs → chunk-TXDES5P2.mjs} +2 -2
  168. package/dist/cli/index.mjs +1677 -440
  169. package/dist/client/{accordion-RZMQSYLR.mjs → accordion-EVDEOUPR.mjs} +2 -2
  170. package/dist/client/{bookingForm-NF4ASVNV.mjs → bookingForm-DIHBLC64.mjs} +27 -30
  171. package/dist/client/bookings.mjs +3707 -259
  172. package/dist/client/{carousel-LDX47ZIK.mjs → carousel-FEBQHIWI.mjs} +3 -4
  173. package/dist/client/{cart-RGXDS5F4.mjs → cart-7CKSXAE4.mjs} +8 -8
  174. package/dist/client/{checkout-P7WWSNNY.mjs → checkout-WKYCANLV.mjs} +8 -8
  175. package/dist/client/{chunk-JNC7CGHX.mjs → chunk-2SAVKN2M.mjs} +2 -2
  176. package/dist/client/{chunk-TQ5MSPDX.mjs → chunk-36WJCERQ.mjs} +1 -1
  177. package/dist/client/{chunk-R56FQ3RR.mjs → chunk-65F47D7Y.mjs} +280 -71
  178. package/dist/client/{chunk-L3DNHIJX.mjs → chunk-GUK2FPXQ.mjs} +23 -45
  179. package/dist/client/{chunk-PMAIXMAB.mjs → chunk-IVNCUVAV.mjs} +26 -21
  180. package/dist/client/{chunk-II7O4XN3.mjs → chunk-OFMSCGNY.mjs} +2 -2
  181. package/dist/client/chunk-PD6NBCEY.mjs +66 -0
  182. package/dist/client/{chunk-GMVTOKYG.mjs → chunk-RV6FX7UH.mjs} +510 -64
  183. package/dist/client/{chunk-E2TDNXCL.mjs → chunk-RZDWX7QW.mjs} +2 -1
  184. package/dist/client/{chunk-M3L3KYYR.mjs → chunk-UDNSI5PY.mjs} +12 -0
  185. package/dist/client/{chunk-JEZECJ3W.mjs → chunk-VPPMNXCF.mjs} +129 -3
  186. package/dist/client/{chunk-UFSWADAO.mjs → chunk-YDSEG6GZ.mjs} +5 -66
  187. package/dist/client/client.mjs +7070 -4561
  188. package/dist/client/{courseRegistration-7F65K5ZR.mjs → courseRegistration-5QF2PHKM.mjs} +14 -11
  189. package/dist/client/{eventCalendar-GLSC5KTL.mjs → eventCalendar-4ZOSETDU.mjs} +9 -9
  190. package/dist/client/{eventCombined-ZHK4WKUR.mjs → eventCombined-WQGU7JUX.mjs} +9 -9
  191. package/dist/client/{eventDetails-E3PJYBIN.mjs → eventDetails-AYWVUJ5Y.mjs} +9 -9
  192. package/dist/client/{eventListing-EMS3WC3E.mjs → eventListing-NT7C6UT5.mjs} +9 -9
  193. package/dist/client/{eventRegistration-NZOTVNPI.mjs → eventRegistration-OH24F4ZJ.mjs} +9 -9
  194. package/dist/client/{form-ETFZFATW.mjs → form-7L42SRBB.mjs} +6 -6
  195. package/dist/client/{headerSection-4LBP7ULT.mjs → headerSection-OZRZNZ52.mjs} +3 -3
  196. package/dist/client/hooks.mjs +1040 -278
  197. package/dist/client/{locationMap-5M655YSJ.mjs → locationMap-ZBXRPQ7C.mjs} +2 -2
  198. package/dist/client/{newsletterForm-QOUYW44O.mjs → newsletterForm-SNAGFF2I.mjs} +3 -3
  199. package/dist/client/{productDetail-O4DOCWQG.mjs → productDetail-I46BOFGV.mjs} +8 -8
  200. package/dist/client/{productList-A5RO5WIS.mjs → productList-BOYHTYI6.mjs} +8 -8
  201. package/dist/client/rendering/client.mjs +7090 -2645
  202. package/dist/client/rendering/islands.mjs +19 -19
  203. package/dist/client/rendering.mjs +6089 -3792
  204. package/dist/client/{shop-L4MZH4I2.mjs → shop-XTXPZTKR.mjs} +8 -8
  205. package/dist/preview-next/before-render.mjs +8 -0
  206. package/dist/preview-next/client/runtime.mjs +5 -5
  207. package/dist/preview-next/editor-chrome.css +10 -0
  208. package/dist/preview-next/middleware.mjs +8 -0
  209. package/dist/{sdk-runtime-6UT2S7KZ.mjs → sdk-runtime-ZJLKC6DR.mjs} +6 -6
  210. package/dist/server/components.mjs +2635 -1262
  211. package/dist/server/config-validation.mjs +1271 -509
  212. package/dist/server/config.mjs +1271 -509
  213. package/dist/server/data.mjs +1040 -278
  214. package/dist/server/index.mjs +488 -246
  215. package/dist/server/next.mjs +4087 -2147
  216. package/dist/server/page-converter.mjs +571 -115
  217. package/dist/server/prebuild.mjs +1 -1
  218. package/dist/server/rendering/server.mjs +2636 -1263
  219. package/dist/server/rendering.mjs +2654 -1268
  220. package/dist/server/routing.mjs +1729 -489
  221. package/dist/server/server.mjs +1532 -530
  222. package/dist/server/theme-bridge.mjs +3151 -131
  223. package/dist/server/theme.mjs +10 -1
  224. package/dist/styles/index.css +488 -48
  225. package/package.json +2 -1
  226. package/dist/SdkPreviewModeRuntime-KLPX47SE.mjs +0 -8
  227. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/DiscountCodeSection.d.ts +0 -7
  228. package/dist/_dts/preview-next/src/client/widgets/PreviewMediaField.d.ts +0 -4
  229. package/dist/client/chunk-OJPZEZU2.mjs +0 -31
  230. package/dist/client/chunk-RTZ3JKKX.mjs +0 -178
@@ -30,63 +30,6 @@ var __export = (target, all) => {
30
30
  __defProp(target, name, { get: all[name], enumerable: true });
31
31
  };
32
32
 
33
- // ../blocks/src/system/manifest/augmentManifest.ts
34
- function augmentManifest(manifest) {
35
- let augmentedFields = manifest.fields ?? [];
36
- const variantField = createVariantField(manifest);
37
- if (variantField) {
38
- augmentedFields = [variantField, ...augmentedFields];
39
- }
40
- return {
41
- ...manifest,
42
- fields: augmentedFields
43
- };
44
- }
45
- function createVariantField(manifest) {
46
- if (!manifest.variants || Object.keys(manifest.variants).length <= 1) {
47
- return null;
48
- }
49
- if (manifest.fields?.some((f) => f.id === "variant")) {
50
- return null;
51
- }
52
- const variantKeys = Object.keys(manifest.variants);
53
- const field = {
54
- id: "variant",
55
- type: "select",
56
- label: "Variant",
57
- description: "Choose a layout variant for this block",
58
- ui: {
59
- intent: "display"
60
- },
61
- required: false,
62
- defaultValue: manifest.defaultVariant ?? variantKeys[0],
63
- options: variantKeys.map((key) => {
64
- const meta = manifest.variantOptions?.[key];
65
- return {
66
- value: key,
67
- label: meta?.label ?? formatKeyAsLabel(key),
68
- ...meta?.description ? { description: meta.description } : {},
69
- ...meta?.icon ? { icon: meta.icon } : {}
70
- };
71
- }),
72
- multiple: false
73
- };
74
- return field;
75
- }
76
- function formatKeyAsLabel(key) {
77
- return key.replace(/([A-Z])/g, " $1").replace(/[-_]/g, " ").trim().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
78
- }
79
- var init_augmentManifest = __esm({
80
- "../blocks/src/system/manifest/augmentManifest.ts"() {
81
- }
82
- });
83
-
84
- // ../media-core/src/types.ts
85
- var init_types = __esm({
86
- "../media-core/src/types.ts"() {
87
- }
88
- });
89
-
90
33
  // ../core/src/branded.ts
91
34
  var asSiteId, asStorageBucketName, unsafeAsPositiveByteCount, unsafeAsPositiveSeconds;
92
35
  var init_branded = __esm({
@@ -103,6 +46,34 @@ var init_date_math = __esm({
103
46
  "../core/src/date-math.ts"() {
104
47
  }
105
48
  });
49
+ var init_duration = __esm({
50
+ "../core/src/duration.ts"() {
51
+ }
52
+ });
53
+
54
+ // ../core/src/demo-capability-policy.ts
55
+ var init_demo_capability_policy = __esm({
56
+ "../core/src/demo-capability-policy.ts"() {
57
+ }
58
+ });
59
+
60
+ // ../core/src/demo-claim-access.ts
61
+ var init_demo_claim_access = __esm({
62
+ "../core/src/demo-claim-access.ts"() {
63
+ }
64
+ });
65
+
66
+ // ../core/src/demo-lifecycle-status.ts
67
+ var init_demo_lifecycle_status = __esm({
68
+ "../core/src/demo-lifecycle-status.ts"() {
69
+ }
70
+ });
71
+
72
+ // ../core/src/demo-runtime.ts
73
+ var init_demo_runtime = __esm({
74
+ "../core/src/demo-runtime.ts"() {
75
+ }
76
+ });
106
77
 
107
78
  // ../core/src/collections.ts
108
79
  var init_collections = __esm({
@@ -252,11 +223,106 @@ var init_participant_identity = __esm({
252
223
  }
253
224
  });
254
225
 
226
+ // ../core/src/public-url-validation.ts
227
+ var init_public_url_validation = __esm({
228
+ "../core/src/public-url-validation.ts"() {
229
+ }
230
+ });
231
+
232
+ // ../core/src/number-input.ts
233
+ var init_number_input = __esm({
234
+ "../core/src/number-input.ts"() {
235
+ }
236
+ });
237
+
238
+ // ../core/src/field-errors.ts
239
+ var init_field_errors = __esm({
240
+ "../core/src/field-errors.ts"() {
241
+ }
242
+ });
243
+
244
+ // ../core/src/form-submission-preview.ts
245
+ var init_form_submission_preview = __esm({
246
+ "../core/src/form-submission-preview.ts"() {
247
+ }
248
+ });
249
+
250
+ // ../core/src/csv-cells.ts
251
+ var init_csv_cells = __esm({
252
+ "../core/src/csv-cells.ts"() {
253
+ }
254
+ });
255
+
256
+ // ../core/src/csv-date-filter.ts
257
+ var init_csv_date_filter = __esm({
258
+ "../core/src/csv-date-filter.ts"() {
259
+ }
260
+ });
261
+
262
+ // ../core/src/csv-escape.ts
263
+ var init_csv_escape = __esm({
264
+ "../core/src/csv-escape.ts"() {
265
+ }
266
+ });
267
+
268
+ // ../core/src/csv-filename.ts
269
+ var init_csv_filename = __esm({
270
+ "../core/src/csv-filename.ts"() {
271
+ }
272
+ });
273
+
274
+ // ../core/src/csv-render.ts
275
+ var init_csv_render = __esm({
276
+ "../core/src/csv-render.ts"() {
277
+ }
278
+ });
279
+
280
+ // ../core/src/csv-types.ts
281
+ var init_csv_types = __esm({
282
+ "../core/src/csv-types.ts"() {
283
+ }
284
+ });
285
+
286
+ // ../core/src/currency-format.ts
287
+ var init_currency_format = __esm({
288
+ "../core/src/currency-format.ts"() {
289
+ }
290
+ });
291
+
292
+ // ../core/src/email-format.ts
293
+ var init_email_format = __esm({
294
+ "../core/src/email-format.ts"() {
295
+ }
296
+ });
297
+
298
+ // ../core/src/slug.ts
299
+ var init_slug = __esm({
300
+ "../core/src/slug.ts"() {
301
+ }
302
+ });
303
+
304
+ // ../core/src/string.ts
305
+ var init_string = __esm({
306
+ "../core/src/string.ts"() {
307
+ }
308
+ });
309
+
310
+ // ../core/src/uuid.ts
311
+ var init_uuid = __esm({
312
+ "../core/src/uuid.ts"() {
313
+ }
314
+ });
315
+
255
316
  // ../core/src/index.ts
256
317
  var init_src = __esm({
257
318
  "../core/src/index.ts"() {
258
319
  init_branded();
259
320
  init_date_math();
321
+ init_duration();
322
+ init_demo_capability_policy();
323
+ init_demo_claim_access();
324
+ init_demo_lifecycle_status();
325
+ init_demo_runtime();
260
326
  init_collections();
261
327
  init_event_pricing();
262
328
  init_money_input();
@@ -277,6 +343,78 @@ var init_src = __esm({
277
343
  init_assertNever();
278
344
  init_participants();
279
345
  init_participant_identity();
346
+ init_public_url_validation();
347
+ init_number_input();
348
+ init_field_errors();
349
+ init_form_submission_preview();
350
+ init_csv_cells();
351
+ init_csv_date_filter();
352
+ init_csv_escape();
353
+ init_csv_filename();
354
+ init_csv_render();
355
+ init_csv_types();
356
+ init_currency_format();
357
+ init_email_format();
358
+ init_slug();
359
+ init_string();
360
+ init_uuid();
361
+ }
362
+ });
363
+
364
+ // ../blocks/src/system/manifest/augmentManifest.ts
365
+ function augmentManifest(manifest) {
366
+ let augmentedFields = manifest.fields ?? [];
367
+ const variantField = createVariantField(manifest);
368
+ if (variantField) {
369
+ augmentedFields = [variantField, ...augmentedFields];
370
+ }
371
+ return {
372
+ ...manifest,
373
+ fields: augmentedFields
374
+ };
375
+ }
376
+ function createVariantField(manifest) {
377
+ if (!manifest.variants || Object.keys(manifest.variants).length <= 1) {
378
+ return null;
379
+ }
380
+ if (manifest.fields?.some((f) => f.id === "variant")) {
381
+ return null;
382
+ }
383
+ const variantKeys = Object.keys(manifest.variants);
384
+ const field = {
385
+ id: "variant",
386
+ type: "select",
387
+ label: "Variant",
388
+ description: "Choose a layout variant for this block",
389
+ ui: {
390
+ intent: "display"
391
+ },
392
+ required: false,
393
+ defaultValue: manifest.defaultVariant ?? variantKeys[0],
394
+ options: variantKeys.map((key) => {
395
+ const meta = manifest.variantOptions?.[key];
396
+ return {
397
+ value: key,
398
+ label: meta?.label ?? formatKeyAsLabel(key),
399
+ ...meta?.description ? { description: meta.description } : {},
400
+ ...meta?.icon ? { icon: meta.icon } : {}
401
+ };
402
+ }),
403
+ multiple: false
404
+ };
405
+ return field;
406
+ }
407
+ function formatKeyAsLabel(key) {
408
+ return key.replace(/([A-Z])/g, " $1").replace(/[-_]/g, " ").trim().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
409
+ }
410
+ var init_augmentManifest = __esm({
411
+ "../blocks/src/system/manifest/augmentManifest.ts"() {
412
+ }
413
+ });
414
+
415
+ // ../media-core/src/types.ts
416
+ var init_types = __esm({
417
+ "../media-core/src/types.ts"() {
280
418
  }
281
419
  });
282
420
 
@@ -431,11 +569,83 @@ var init_fileMimeDetection = __esm({
431
569
  new TextDecoder("latin1");
432
570
  }
433
571
  });
572
+
573
+ // ../media-core/src/filename.ts
574
+ var init_filename = __esm({
575
+ "../media-core/src/filename.ts"() {
576
+ }
577
+ });
578
+
579
+ // ../media-core/src/uploadVerificationContract.ts
580
+ var PRODUCT_FILE_EXTENSION_TAGS;
581
+ var init_uploadVerificationContract = __esm({
582
+ "../media-core/src/uploadVerificationContract.ts"() {
583
+ PRODUCT_FILE_EXTENSION_TAGS = [
584
+ "pdf",
585
+ "docx",
586
+ "txt",
587
+ "rtf",
588
+ "csv",
589
+ "zip",
590
+ "mp3",
591
+ "m4a",
592
+ "wav",
593
+ "ogg",
594
+ "flac",
595
+ "webm",
596
+ "mp4",
597
+ "mov"
598
+ ];
599
+ new Set(PRODUCT_FILE_EXTENSION_TAGS);
600
+ }
601
+ });
434
602
  var init_videoPrep = __esm({
435
603
  "../media-core/src/videoPrep.ts"() {
436
604
  }
437
605
  });
438
606
 
607
+ // ../media-core/src/videoAssetRepair.ts
608
+ var init_videoAssetRepair = __esm({
609
+ "../media-core/src/videoAssetRepair.ts"() {
610
+ }
611
+ });
612
+
613
+ // ../media-core/src/canonicalCropReview.ts
614
+ var init_canonicalCropReview = __esm({
615
+ "../media-core/src/canonicalCropReview.ts"() {
616
+ }
617
+ });
618
+
619
+ // ../media-core/src/mediaAssetUsageStatus.ts
620
+ var init_mediaAssetUsageStatus = __esm({
621
+ "../media-core/src/mediaAssetUsageStatus.ts"() {
622
+ }
623
+ });
624
+
625
+ // ../media-core/src/assetsInUseSummary.ts
626
+ var init_assetsInUseSummary = __esm({
627
+ "../media-core/src/assetsInUseSummary.ts"() {
628
+ }
629
+ });
630
+
631
+ // ../media-core/src/bulkDeletePlanning.ts
632
+ var init_bulkDeletePlanning = __esm({
633
+ "../media-core/src/bulkDeletePlanning.ts"() {
634
+ }
635
+ });
636
+
637
+ // ../media-core/src/classifyAllPlanning.ts
638
+ var init_classifyAllPlanning = __esm({
639
+ "../media-core/src/classifyAllPlanning.ts"() {
640
+ }
641
+ });
642
+
643
+ // ../media-core/src/mediaSettingsState.ts
644
+ var init_mediaSettingsState = __esm({
645
+ "../media-core/src/mediaSettingsState.ts"() {
646
+ }
647
+ });
648
+
439
649
  // ../media-core/src/videoSlotPolicy.ts
440
650
  var init_videoSlotPolicy = __esm({
441
651
  "../media-core/src/videoSlotPolicy.ts"() {
@@ -674,6 +884,12 @@ var init_mediaUsageProjection = __esm({
674
884
  }
675
885
  });
676
886
 
887
+ // ../media-core/src/portableMediaReferences.ts
888
+ var init_portableMediaReferences = __esm({
889
+ "../media-core/src/portableMediaReferences.ts"() {
890
+ }
891
+ });
892
+
677
893
  // ../media-core/src/index.ts
678
894
  var init_src2 = __esm({
679
895
  "../media-core/src/index.ts"() {
@@ -693,7 +909,16 @@ var init_src2 = __esm({
693
909
  init_fileAssetDeletion();
694
910
  init_fileAssetCompatibility();
695
911
  init_fileMimeDetection();
912
+ init_filename();
913
+ init_uploadVerificationContract();
696
914
  init_videoPrep();
915
+ init_videoAssetRepair();
916
+ init_canonicalCropReview();
917
+ init_mediaAssetUsageStatus();
918
+ init_assetsInUseSummary();
919
+ init_bulkDeletePlanning();
920
+ init_classifyAllPlanning();
921
+ init_mediaSettingsState();
697
922
  init_videoSlotPolicy();
698
923
  init_identifiers();
699
924
  init_url();
@@ -702,6 +927,7 @@ var init_src2 = __esm({
702
927
  init_mediaWriteNormalizer();
703
928
  init_richTextImageWriteNormalizer();
704
929
  init_mediaUsageProjection();
930
+ init_portableMediaReferences();
705
931
  }
706
932
  });
707
933
  var transformStepSchema, bindingPathSchema, bindingSchema, repeatSchema, conditionSchema, dataScopeSchema, nodePropsSchema, nodeSchema, nodeTreeSchema, NodeSchema, NodeTreeSchema;
@@ -1767,6 +1993,9 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
1767
1993
  const next = encodeURIComponent(nextBlockId);
1768
1994
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
1769
1995
  }
1996
+ function assertNever3(value, message = "Unhandled Theme V2 variant") {
1997
+ throw new Error(`${message}: ${String(value)}`);
1998
+ }
1770
1999
  function brandNonEmptyString(value, label) {
1771
2000
  if (value.length === 0) {
1772
2001
  throw new Error(`${label} must be a non-empty string.`);
@@ -1792,12 +2021,13 @@ function defineBlockDesignCapability(capability) {
1792
2021
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
1793
2022
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
1794
2023
  tileTreatments: capability.tileTreatments ?? ["default"],
2024
+ eventListTreatments: capability.eventListTreatments ?? ["plain"],
1795
2025
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
1796
2026
  ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
1797
2027
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
1798
2028
  };
1799
2029
  }
1800
- var plainFrame, tileTreatmentValues, eyebrowTreatmentValues, visibleHeadingDecorationFamilyValues, visibleHeadingDecorationPlacementValues, headingDecorationOverrideValues, headingDecorationColorTokenValues, accordionIconSetValues, accordionIconColorTokenValues, accordionIconMotionValues;
2030
+ var plainFrame, tileTreatmentValues, eventListTreatmentValues, eyebrowTreatmentValues, visibleHeadingDecorationFamilyValues, visibleHeadingDecorationPlacementValues, headingDecorationOverrideValues, headingDecorationColorTokenValues, accordionIconSetValues, accordionIconColorTokenValues, accordionIconMotionValues;
1801
2031
  var init_types2 = __esm({
1802
2032
  "../theme-core/src/site-styles/types.ts"() {
1803
2033
  plainFrame = {
@@ -1808,6 +2038,10 @@ var init_types2 = __esm({
1808
2038
  "quiet",
1809
2039
  "brand-depth"
1810
2040
  ];
2041
+ eventListTreatmentValues = [
2042
+ "plain",
2043
+ "lined-panel"
2044
+ ];
1811
2045
  eyebrowTreatmentValues = [
1812
2046
  "plain",
1813
2047
  "pill",
@@ -1882,9 +2116,98 @@ var init_blockAppearancePresets = __esm({
1882
2116
  transitionAfter: "soft-fade-short",
1883
2117
  emphasis: "high",
1884
2118
  sectionHeight: "hero",
2119
+ heroComposition: "center",
2120
+ heroTypographyScale: "display",
1885
2121
  imageSurfaceTreatment: { kind: "neutral-wash" }
1886
2122
  }
1887
2123
  }),
2124
+ defineBlockAppearancePreset({
2125
+ kind: "block-design",
2126
+ id: "hero-bottom-left-panel",
2127
+ target: "hero",
2128
+ label: "Bottom-left panel hero",
2129
+ blockKinds: ["block.hero"],
2130
+ constraints: {
2131
+ layoutFamilies: ["centered", "compact"]
2132
+ },
2133
+ optionGroups: [
2134
+ {
2135
+ id: "image-surface-treatment",
2136
+ label: "Treatment",
2137
+ selectedOptionId: "neutral-scrim",
2138
+ options: [
2139
+ {
2140
+ id: "neutral-scrim",
2141
+ label: "Neutral scrim",
2142
+ designPatch: {
2143
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
2144
+ }
2145
+ },
2146
+ {
2147
+ id: "brand-scrim-primary",
2148
+ label: "Brand scrim",
2149
+ designPatch: {
2150
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "balanced" }
2151
+ }
2152
+ }
2153
+ ]
2154
+ }
2155
+ ],
2156
+ layoutPatches: [
2157
+ {
2158
+ constraints: {
2159
+ layoutVariantKeys: ["micro"]
2160
+ },
2161
+ designPatch: {
2162
+ sectionHeight: "banner",
2163
+ heroTypographyScale: "editorial"
2164
+ }
2165
+ }
2166
+ ],
2167
+ design: {
2168
+ sectionSurface: "hero-image",
2169
+ contentFrame: panelFrame("raised"),
2170
+ itemSurface: "none",
2171
+ transitionAfter: "soft-fade-short",
2172
+ emphasis: "high",
2173
+ sectionHeight: "immersive",
2174
+ heroComposition: "bottom-left",
2175
+ heroTypographyScale: "display",
2176
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
2177
+ }
2178
+ }),
2179
+ defineBlockAppearancePreset({
2180
+ kind: "block-design",
2181
+ id: "hero-poster-image",
2182
+ target: "hero",
2183
+ label: "Poster image hero",
2184
+ blockKinds: ["block.hero"],
2185
+ constraints: {
2186
+ layoutFamilies: ["centered", "compact"]
2187
+ },
2188
+ layoutPatches: [
2189
+ {
2190
+ constraints: {
2191
+ layoutVariantKeys: ["micro"]
2192
+ },
2193
+ designPatch: {
2194
+ sectionHeight: "banner",
2195
+ heroTypographyScale: "display"
2196
+ }
2197
+ }
2198
+ ],
2199
+ design: {
2200
+ sectionSurface: "hero-image",
2201
+ contentFrame: plainFrame,
2202
+ itemSurface: "none",
2203
+ transitionAfter: "soft-fade-short",
2204
+ emphasis: "high",
2205
+ sectionHeight: "immersive",
2206
+ heroComposition: "center",
2207
+ heroTypographyScale: "poster",
2208
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "strong" }
2209
+ }
2210
+ }),
1888
2211
  defineBlockAppearancePreset({
1889
2212
  kind: "block-design",
1890
2213
  id: "hero-brand-scrim",
@@ -1934,6 +2257,8 @@ var init_blockAppearancePresets = __esm({
1934
2257
  transitionAfter: "soft-fade-short",
1935
2258
  emphasis: "high",
1936
2259
  sectionHeight: "immersive",
2260
+ heroComposition: "center",
2261
+ heroTypographyScale: "display",
1937
2262
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
1938
2263
  }
1939
2264
  }),
@@ -1986,6 +2311,8 @@ var init_blockAppearancePresets = __esm({
1986
2311
  transitionAfter: "soft-fade-short",
1987
2312
  emphasis: "high",
1988
2313
  sectionHeight: "immersive",
2314
+ heroComposition: "center",
2315
+ heroTypographyScale: "display",
1989
2316
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
1990
2317
  imageSurfaceMotion: "fixed-frame",
1991
2318
  eyebrowTreatment: "accent-pill-bounce"
@@ -2006,6 +2333,8 @@ var init_blockAppearancePresets = __esm({
2006
2333
  itemSurface: "none",
2007
2334
  transitionAfter: "soft-fade-short",
2008
2335
  emphasis: "high",
2336
+ heroComposition: "center",
2337
+ heroTypographyScale: "editorial",
2009
2338
  eyebrowTreatment: "accent-pill-bounce"
2010
2339
  }
2011
2340
  }),
@@ -2020,7 +2349,82 @@ var init_blockAppearancePresets = __esm({
2020
2349
  contentFrame: panelFrame("inset"),
2021
2350
  itemSurface: "none",
2022
2351
  transitionAfter: "none",
2023
- emphasis: "high"
2352
+ emphasis: "high",
2353
+ heroComposition: "center",
2354
+ heroTypographyScale: "editorial"
2355
+ }
2356
+ }),
2357
+ defineBlockAppearancePreset({
2358
+ kind: "block-design",
2359
+ id: "hero-split-editorial",
2360
+ target: "hero",
2361
+ label: "Editorial split hero",
2362
+ blockKinds: ["block.hero"],
2363
+ constraints: {
2364
+ layoutFamilies: ["split"]
2365
+ },
2366
+ design: {
2367
+ sectionSurface: "base",
2368
+ contentFrame: plainFrame,
2369
+ itemSurface: "none",
2370
+ transitionAfter: "soft-fade-short",
2371
+ emphasis: "high",
2372
+ heroTypographyScale: "editorial"
2373
+ }
2374
+ }),
2375
+ defineBlockAppearancePreset({
2376
+ kind: "block-design",
2377
+ id: "hero-split-brand",
2378
+ target: "hero",
2379
+ label: "Brand split hero",
2380
+ blockKinds: ["block.hero"],
2381
+ constraints: {
2382
+ layoutFamilies: ["split"]
2383
+ },
2384
+ design: {
2385
+ sectionSurface: "brand-depth-band",
2386
+ contentFrame: plainFrame,
2387
+ itemSurface: "none",
2388
+ transitionAfter: "soft-fade-short",
2389
+ emphasis: "high",
2390
+ heroTypographyScale: "display",
2391
+ eyebrowTreatment: "accent-pill-bounce"
2392
+ }
2393
+ }),
2394
+ defineBlockAppearancePreset({
2395
+ kind: "block-design",
2396
+ id: "hero-split-soft-panel",
2397
+ target: "hero",
2398
+ label: "Soft panel split hero",
2399
+ blockKinds: ["block.hero"],
2400
+ constraints: {
2401
+ layoutFamilies: ["split"]
2402
+ },
2403
+ design: {
2404
+ sectionSurface: "muted-band",
2405
+ contentFrame: panelFrame("raised"),
2406
+ itemSurface: "none",
2407
+ transitionAfter: "soft-fade-short",
2408
+ emphasis: "high",
2409
+ heroTypographyScale: "editorial"
2410
+ }
2411
+ }),
2412
+ defineBlockAppearancePreset({
2413
+ kind: "block-design",
2414
+ id: "hero-split-accent",
2415
+ target: "hero",
2416
+ label: "Accent split hero",
2417
+ blockKinds: ["block.hero"],
2418
+ constraints: {
2419
+ layoutFamilies: ["split"]
2420
+ },
2421
+ design: {
2422
+ sectionSurface: "accent-band",
2423
+ contentFrame: panelFrame("raised"),
2424
+ itemSurface: "none",
2425
+ transitionAfter: "soft-fade-short",
2426
+ emphasis: "high",
2427
+ heroTypographyScale: "display"
2024
2428
  }
2025
2429
  }),
2026
2430
  defineBlockAppearancePreset({
@@ -2053,9 +2457,9 @@ var init_blockAppearancePresets = __esm({
2053
2457
  }),
2054
2458
  defineBlockAppearancePreset({
2055
2459
  kind: "block-design",
2056
- id: "intro-soft-earth-statement",
2460
+ id: "intro-organic-statement",
2057
2461
  target: "intro",
2058
- label: "Soft Earth intro statement",
2462
+ label: "Organic intro statement",
2059
2463
  blockKinds: ["block.intro"],
2060
2464
  design: {
2061
2465
  sectionSurface: "base",
@@ -2086,9 +2490,9 @@ var init_blockAppearancePresets = __esm({
2086
2490
  }),
2087
2491
  defineBlockAppearancePreset({
2088
2492
  kind: "block-design",
2089
- id: "feature-cards-soft-earth-offerings",
2493
+ id: "feature-cards-raised-rule",
2090
2494
  target: "feature-cards",
2091
- label: "Soft Earth offering cards",
2495
+ label: "Raised cards with rule",
2092
2496
  blockKinds: ["block.feature-cards"],
2093
2497
  design: {
2094
2498
  sectionSurface: "base",
@@ -2117,6 +2521,21 @@ var init_blockAppearancePresets = __esm({
2117
2521
  emphasis: "medium"
2118
2522
  }
2119
2523
  }),
2524
+ defineBlockAppearancePreset({
2525
+ kind: "block-design",
2526
+ id: "events-lined-panel",
2527
+ target: "events",
2528
+ label: "Lined event panel",
2529
+ blockKinds: ["block.event-calendar", "block.event-listing"],
2530
+ design: {
2531
+ sectionSurface: "base",
2532
+ contentFrame: plainFrame,
2533
+ itemSurface: "none",
2534
+ transitionAfter: "none",
2535
+ emphasis: "medium",
2536
+ eventListTreatment: "lined-panel"
2537
+ }
2538
+ }),
2120
2539
  defineBlockAppearancePreset({
2121
2540
  kind: "block-design",
2122
2541
  id: "schedule-details-accent-section",
@@ -2176,9 +2595,9 @@ var init_blockAppearancePresets = __esm({
2176
2595
  }),
2177
2596
  defineBlockAppearancePreset({
2178
2597
  kind: "block-design",
2179
- id: "testimonials-carded-proof",
2598
+ id: "testimonials-simple-cards",
2180
2599
  target: "testimonials",
2181
- label: "Carded social proof",
2600
+ label: "Simple testimonial cards",
2182
2601
  blockKinds: ["block.testimonials"],
2183
2602
  design: {
2184
2603
  sectionSurface: "base",
@@ -2190,9 +2609,9 @@ var init_blockAppearancePresets = __esm({
2190
2609
  }),
2191
2610
  defineBlockAppearancePreset({
2192
2611
  kind: "block-design",
2193
- id: "testimonials-contained-proof",
2612
+ id: "testimonials-raised-panel",
2194
2613
  target: "testimonials",
2195
- label: "Contained social proof",
2614
+ label: "Raised testimonial panel",
2196
2615
  blockKinds: ["block.testimonials"],
2197
2616
  design: {
2198
2617
  sectionSurface: "muted-band",
@@ -2204,9 +2623,9 @@ var init_blockAppearancePresets = __esm({
2204
2623
  }),
2205
2624
  defineBlockAppearancePreset({
2206
2625
  kind: "block-design",
2207
- id: "testimonials-dark-proof",
2626
+ id: "testimonials-accent-panel",
2208
2627
  target: "testimonials",
2209
- label: "Dark proof panel",
2628
+ label: "Accent testimonial panel",
2210
2629
  blockKinds: ["block.testimonials"],
2211
2630
  design: {
2212
2631
  sectionSurface: "accent-band",
@@ -2218,9 +2637,9 @@ var init_blockAppearancePresets = __esm({
2218
2637
  }),
2219
2638
  defineBlockAppearancePreset({
2220
2639
  kind: "block-design",
2221
- id: "testimonials-accent-quote-proof",
2640
+ id: "testimonials-accent-quote-cards",
2222
2641
  target: "testimonials",
2223
- label: "Accent quote proof",
2642
+ label: "Accent quote cards",
2224
2643
  blockKinds: ["block.testimonials"],
2225
2644
  design: {
2226
2645
  sectionSurface: "accent-band",
@@ -2233,9 +2652,9 @@ var init_blockAppearancePresets = __esm({
2233
2652
  }),
2234
2653
  defineBlockAppearancePreset({
2235
2654
  kind: "block-design",
2236
- id: "testimonials-soft-earth-proof-band",
2655
+ id: "testimonials-brand-background-quotes",
2237
2656
  target: "testimonials",
2238
- label: "Soft Earth proof band",
2657
+ label: "Brand background quotes",
2239
2658
  blockKinds: ["block.testimonials"],
2240
2659
  design: {
2241
2660
  sectionSurface: "brand-depth-band",
@@ -2279,25 +2698,6 @@ var init_blockAppearancePresets = __esm({
2279
2698
  emphasis: "low"
2280
2699
  }
2281
2700
  }),
2282
- defineBlockAppearancePreset({
2283
- kind: "block-design",
2284
- id: "faq-soft-earth-two-column",
2285
- target: "faq",
2286
- label: "Soft Earth two-column FAQ",
2287
- blockKinds: ["block.faq"],
2288
- design: {
2289
- sectionSurface: "base",
2290
- contentFrame: plainFrame,
2291
- itemSurface: "flat",
2292
- transitionAfter: "none",
2293
- emphasis: "medium",
2294
- accordionIconTreatment: {
2295
- iconSet: "plus",
2296
- colorToken: "primary",
2297
- motion: "swap"
2298
- }
2299
- }
2300
- }),
2301
2701
  defineBlockAppearancePreset({
2302
2702
  kind: "block-design",
2303
2703
  id: "contact-form-panel",
@@ -4018,7 +4418,8 @@ var init_types7 = __esm({
4018
4418
  icon: z.object({
4019
4419
  style: accordionIconSchema,
4020
4420
  position: z.enum(["left", "right"]),
4021
- size: z.enum(["sm", "md", "lg"])
4421
+ size: z.enum(["sm", "md", "lg"]),
4422
+ colorToken: themeColorTokenSchema.optional()
4022
4423
  }),
4023
4424
  // Trigger (question) styling
4024
4425
  trigger: z.object({
@@ -4152,7 +4553,7 @@ var init_baseSchema = __esm({
4152
4553
  });
4153
4554
  }
4154
4555
  });
4155
- var navLinkPaddingSchema, navLinkPaddingXSchema, navLinkBorderRadiusSchema, navLinkTextSizeSchema, navLinkLetterSpacingSchema, navLinkStyleSchema;
4556
+ var navLinkPaddingSchema, navLinkPaddingXSchema, navLinkBorderRadiusSchema, navLinkTextSizeSchema, navLinkLetterSpacingSchema, navLinkContrastTreatmentSchema, navLinkStyleSchema;
4156
4557
  var init_types10 = __esm({
4157
4558
  "../theme-core/src/navigation/types.ts"() {
4158
4559
  init_baseSchema();
@@ -4162,6 +4563,7 @@ var init_types10 = __esm({
4162
4563
  navLinkBorderRadiusSchema = z.enum(["none", "sm", "md", "full"]);
4163
4564
  navLinkTextSizeSchema = z.enum(["xs", "sm", "base", "lg"]);
4164
4565
  navLinkLetterSpacingSchema = z.enum(["normal", "wide", "wider", "widest"]);
4566
+ navLinkContrastTreatmentSchema = z.enum(["none", "soft-glow"]);
4165
4567
  navLinkStyleSchema = z.object({
4166
4568
  /** Display name for the style */
4167
4569
  name: z.string().min(1).max(30).optional(),
@@ -4173,6 +4575,8 @@ var init_types10 = __esm({
4173
4575
  textSize: navLinkTextSizeSchema.optional(),
4174
4576
  /** Optional letter spacing override */
4175
4577
  letterSpacing: navLinkLetterSpacingSchema.optional(),
4578
+ /** Optional text-only contrast treatment for transparent/overlay navigation */
4579
+ contrastTreatment: navLinkContrastTreatmentSchema.optional(),
4176
4580
  /** Hover/active color token (for color-change effects) */
4177
4581
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
4178
4582
  /** Padding preset */
@@ -4642,6 +5046,7 @@ var init_schema3 = __esm({
4642
5046
  spacing: semanticSpacingSchema.nullable().optional(),
4643
5047
  minHeight: z.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
4644
5048
  tileTreatment: z.enum(tileTreatmentValues).nullable().optional(),
5049
+ eventListTreatment: z.enum(eventListTreatmentValues).nullable().optional(),
4645
5050
  eyebrowTreatment: z.enum(eyebrowTreatmentValues).nullable().optional(),
4646
5051
  headingDecoration: headingDecorationSchema.nullable().optional(),
4647
5052
  // Author-level override consumed by later block/editor rendering phases.
@@ -5520,6 +5925,39 @@ var init_variants = __esm({
5520
5925
  }
5521
5926
  });
5522
5927
 
5928
+ // ../theme-core/src/accordions/siteStyleDefaults.ts
5929
+ var softEarthAccordionSystem;
5930
+ var init_siteStyleDefaults = __esm({
5931
+ "../theme-core/src/accordions/siteStyleDefaults.ts"() {
5932
+ softEarthAccordionSystem = {
5933
+ background: {
5934
+ type: "solid",
5935
+ colorToken: "background"
5936
+ },
5937
+ spacing: "comfortable",
5938
+ corners: "square",
5939
+ border: null,
5940
+ shadow: null,
5941
+ icon: {
5942
+ style: "plus-minus",
5943
+ position: "right",
5944
+ size: "md",
5945
+ colorToken: "primary"
5946
+ },
5947
+ trigger: {
5948
+ textColorToken: "text",
5949
+ fontWeight: "medium"
5950
+ },
5951
+ hover: {
5952
+ textColorToken: "primary"
5953
+ },
5954
+ content: {
5955
+ textColorToken: "neutral-700"
5956
+ }
5957
+ };
5958
+ }
5959
+ });
5960
+
5523
5961
  // ../theme-core/src/site-styles/customizableSurfaces.ts
5524
5962
  var init_customizableSurfaces = __esm({
5525
5963
  "../theme-core/src/site-styles/customizableSurfaces.ts"() {
@@ -5588,6 +6026,23 @@ function getCompatibleHeaderStyleIds(layoutId) {
5588
6026
  }
5589
6027
  );
5590
6028
  }
6029
+ function themedHeaderShadow(theme) {
6030
+ switch (theme.shadow.elevation) {
6031
+ case "none":
6032
+ return void 0;
6033
+ case "low":
6034
+ return { elevation: "sm" };
6035
+ case "medium":
6036
+ return { elevation: "md" };
6037
+ case "high":
6038
+ return { elevation: "lg" };
6039
+ default:
6040
+ return assertNever3(
6041
+ theme.shadow.elevation,
6042
+ "Unhandled theme shadow elevation"
6043
+ );
6044
+ }
6045
+ }
5591
6046
  function solidBrandHeader(theme) {
5592
6047
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
5593
6048
  return {
@@ -5737,9 +6192,7 @@ function practicalUtilityHeader(theme) {
5737
6192
  navColor: "text",
5738
6193
  navStyle: "solid",
5739
6194
  navWeight: "semibold",
5740
- shadow: {
5741
- elevation: "sm"
5742
- },
6195
+ shadow: themedHeaderShadow(theme),
5743
6196
  border: {
5744
6197
  style: "solid",
5745
6198
  width: "thin",
@@ -5808,6 +6261,7 @@ function floatingGlassHeader(theme) {
5808
6261
  return {
5809
6262
  ...transparentOverlayHeader(theme),
5810
6263
  variant: "floating",
6264
+ positioning: "sticky",
5811
6265
  navStyle: "frosted",
5812
6266
  navContainer: {
5813
6267
  type: "glass",
@@ -5863,7 +6317,7 @@ var init_headerLooks = __esm({
5863
6317
  description: "Detached header chrome that sits over the opening section.",
5864
6318
  structure: "floating-shell",
5865
6319
  variant: "floating",
5866
- defaultPositioning: "fixed",
6320
+ defaultPositioning: "sticky",
5867
6321
  shrinkOnScroll: true,
5868
6322
  maxRecommendedNavItems: 5,
5869
6323
  allowedLogoShapes: ["none", "text-only", "horizontal"]
@@ -5877,7 +6331,9 @@ var init_headerLooks = __esm({
5877
6331
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5878
6332
  navInteraction: "color-change",
5879
6333
  surface: "neutral",
5880
- navTypography: "plain"
6334
+ defaultDepth: "none",
6335
+ navTypography: "plain",
6336
+ moods: ["calm", "professional", "editorial"]
5881
6337
  },
5882
6338
  {
5883
6339
  id: asHeaderStyleId("fine-line"),
@@ -5886,7 +6342,9 @@ var init_headerLooks = __esm({
5886
6342
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5887
6343
  navInteraction: "underline-grow",
5888
6344
  surface: "bordered",
5889
- navTypography: "plain"
6345
+ defaultDepth: "line",
6346
+ navTypography: "plain",
6347
+ moods: ["calm", "professional", "editorial"]
5890
6348
  },
5891
6349
  {
5892
6350
  id: asHeaderStyleId("soft-bar"),
@@ -5895,7 +6353,9 @@ var init_headerLooks = __esm({
5895
6353
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5896
6354
  navInteraction: "pill-background",
5897
6355
  surface: "soft",
5898
- navTypography: "plain"
6356
+ defaultDepth: "line",
6357
+ navTypography: "plain",
6358
+ moods: ["calm", "professional"]
5899
6359
  },
5900
6360
  {
5901
6361
  id: asHeaderStyleId("pill-nav"),
@@ -5904,7 +6364,9 @@ var init_headerLooks = __esm({
5904
6364
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5905
6365
  navInteraction: "pill-background",
5906
6366
  surface: "soft",
5907
- navTypography: "plain"
6367
+ defaultDepth: "none",
6368
+ navTypography: "plain",
6369
+ moods: ["calm"]
5908
6370
  },
5909
6371
  {
5910
6372
  id: asHeaderStyleId("brand-bar"),
@@ -5913,7 +6375,9 @@ var init_headerLooks = __esm({
5913
6375
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5914
6376
  navInteraction: "color-change",
5915
6377
  surface: "brand-solid",
5916
- navTypography: "brand-caps"
6378
+ defaultDepth: "none",
6379
+ navTypography: "brand-caps",
6380
+ moods: ["professional", "expressive", "utility"]
5917
6381
  },
5918
6382
  {
5919
6383
  id: asHeaderStyleId("brand-underline"),
@@ -5922,7 +6386,9 @@ var init_headerLooks = __esm({
5922
6386
  supportedLayoutIds: supportedLayouts(["classic"]),
5923
6387
  navInteraction: "underline-grow",
5924
6388
  surface: "brand-solid",
5925
- navTypography: "brand-caps"
6389
+ defaultDepth: "none",
6390
+ navTypography: "brand-caps",
6391
+ moods: ["expressive"]
5926
6392
  },
5927
6393
  {
5928
6394
  id: asHeaderStyleId("brand-pill"),
@@ -5931,7 +6397,9 @@ var init_headerLooks = __esm({
5931
6397
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
5932
6398
  navInteraction: "pill-background",
5933
6399
  surface: "brand-solid",
5934
- navTypography: "brand-caps"
6400
+ defaultDepth: "none",
6401
+ navTypography: "brand-caps",
6402
+ moods: ["expressive"]
5935
6403
  },
5936
6404
  {
5937
6405
  id: asHeaderStyleId("serif-line"),
@@ -5940,7 +6408,9 @@ var init_headerLooks = __esm({
5940
6408
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5941
6409
  navInteraction: "underline-grow",
5942
6410
  surface: "bordered",
5943
- navTypography: "heading"
6411
+ defaultDepth: "line",
6412
+ navTypography: "heading",
6413
+ moods: ["editorial", "calm"]
5944
6414
  },
5945
6415
  {
5946
6416
  id: asHeaderStyleId("flat-tabs"),
@@ -5949,16 +6419,20 @@ var init_headerLooks = __esm({
5949
6419
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5950
6420
  navInteraction: "flat-block",
5951
6421
  surface: "bordered",
5952
- navTypography: "quiet-caps"
6422
+ defaultDepth: "shadow",
6423
+ navTypography: "quiet-caps",
6424
+ moods: ["professional", "utility", "expressive"]
5953
6425
  },
5954
6426
  {
5955
6427
  id: asHeaderStyleId("glass"),
5956
6428
  label: "Glass",
5957
6429
  description: "Translucent chrome with frosted navigation backing.",
5958
- supportedLayoutIds: supportedLayouts(["classic", "floating"]),
6430
+ supportedLayoutIds: supportedLayouts(["floating"]),
5959
6431
  navInteraction: "glass-backed",
5960
6432
  surface: "floating",
5961
- navTypography: "plain"
6433
+ defaultDepth: "shadow",
6434
+ navTypography: "plain",
6435
+ moods: ["expressive", "calm"]
5962
6436
  },
5963
6437
  {
5964
6438
  id: asHeaderStyleId("minimal-surface"),
@@ -5967,7 +6441,9 @@ var init_headerLooks = __esm({
5967
6441
  supportedLayoutIds: supportedLayouts(["floating"]),
5968
6442
  navInteraction: "color-change",
5969
6443
  surface: "floating",
5970
- navTypography: "plain"
6444
+ defaultDepth: "none",
6445
+ navTypography: "plain",
6446
+ moods: ["editorial", "calm"]
5971
6447
  },
5972
6448
  {
5973
6449
  id: asHeaderStyleId("soft-shell"),
@@ -5976,7 +6452,9 @@ var init_headerLooks = __esm({
5976
6452
  supportedLayoutIds: supportedLayouts(["floating"]),
5977
6453
  navInteraction: "pill-background",
5978
6454
  surface: "floating",
5979
- navTypography: "plain"
6455
+ defaultDepth: "shadow",
6456
+ navTypography: "plain",
6457
+ moods: ["calm", "professional"]
5980
6458
  },
5981
6459
  {
5982
6460
  id: asHeaderStyleId("split-glass"),
@@ -5985,7 +6463,9 @@ var init_headerLooks = __esm({
5985
6463
  supportedLayoutIds: supportedLayouts(["floating"]),
5986
6464
  navInteraction: "glass-backed",
5987
6465
  surface: "floating",
5988
- navTypography: "quiet-caps"
6466
+ defaultDepth: "shadow",
6467
+ navTypography: "quiet-caps",
6468
+ moods: ["expressive"]
5989
6469
  },
5990
6470
  {
5991
6471
  id: asHeaderStyleId("split-pill"),
@@ -5994,7 +6474,9 @@ var init_headerLooks = __esm({
5994
6474
  supportedLayoutIds: supportedLayouts(["floating"]),
5995
6475
  navInteraction: "pill-background",
5996
6476
  surface: "floating",
5997
- navTypography: "heading"
6477
+ defaultDepth: "shadow",
6478
+ navTypography: "heading",
6479
+ moods: ["calm", "editorial"]
5998
6480
  }
5999
6481
  ];
6000
6482
  headerLayoutsById = new Map(
@@ -6008,7 +6490,6 @@ var init_headerLooks = __esm({
6008
6490
  asHeaderLayoutId("classic"),
6009
6491
  headerStyleRepairChain([
6010
6492
  "minimal",
6011
- "glass",
6012
6493
  "fine-line",
6013
6494
  "soft-bar",
6014
6495
  "pill-nav",
@@ -6072,7 +6553,13 @@ var init_headerLooks = __esm({
6072
6553
  ],
6073
6554
  [
6074
6555
  asHeaderStyleId("glass"),
6075
- headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
6556
+ headerStyleRepairChain([
6557
+ "glass",
6558
+ "soft-shell",
6559
+ "fine-line",
6560
+ "minimal-surface",
6561
+ "minimal"
6562
+ ])
6076
6563
  ],
6077
6564
  [
6078
6565
  asHeaderStyleId("soft-shell"),
@@ -6684,7 +7171,7 @@ var init_typographyPresets = __esm({
6684
7171
  heroTypography: {
6685
7172
  headlineSize: "6xl",
6686
7173
  headlineLineHeight: "tight",
6687
- subheadlineSize: "editorial",
7174
+ subheadlineSize: "2xl",
6688
7175
  subheadlineLineHeight: "normal",
6689
7176
  microHeadlineSize: "6xl",
6690
7177
  microHeadlineLineHeight: "tight",
@@ -6720,7 +7207,10 @@ function uniqueContentFrameKinds() {
6720
7207
  }
6721
7208
  function defineCuratedSiteStyle(input) {
6722
7209
  const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
6723
- const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
7210
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(
7211
+ legacyHeaderLookIds,
7212
+ input.tokenRecipes
7213
+ );
6724
7214
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
6725
7215
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
6726
7216
  if (!typographyPresetChoices.some(
@@ -6753,6 +7243,7 @@ function defineCuratedSiteStyle(input) {
6753
7243
  supportedTransitions: generatedDesignOptionCatalog.transitions
6754
7244
  },
6755
7245
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
7246
+ ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
6756
7247
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
6757
7248
  defaultHeaderSelection: input.defaultHeaderSelection ? {
6758
7249
  layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
@@ -6811,7 +7302,69 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
6811
7302
  };
6812
7303
  return [first, ...choices.slice(1)];
6813
7304
  }
6814
- function inferHeaderCurationFromLegacyLooks(lookIds) {
7305
+ function uniqueCompatibleHeaderStyleChoices(choices, fallbackLayoutId) {
7306
+ const compatible = new Set(getCompatibleHeaderStyleIds(fallbackLayoutId));
7307
+ const seen = /* @__PURE__ */ new Set();
7308
+ const unique = choices.filter((choice) => {
7309
+ if (!compatible.has(choice.id)) return false;
7310
+ if (seen.has(choice.id)) return false;
7311
+ seen.add(choice.id);
7312
+ return true;
7313
+ });
7314
+ return nonEmptyHeaderStyleChoices(unique, fallbackLayoutId);
7315
+ }
7316
+ function inferredHeaderStyleValuesForRecipes(layoutId, recipes) {
7317
+ switch (layoutId) {
7318
+ case "classic":
7319
+ if (isExpressiveRecipe(recipes)) {
7320
+ return [
7321
+ "brand-bar",
7322
+ "brand-underline",
7323
+ "flat-tabs",
7324
+ "brand-pill",
7325
+ "fine-line"
7326
+ ];
7327
+ }
7328
+ if (recipes.spacing === "compact") {
7329
+ return ["flat-tabs", "fine-line", "minimal", "brand-bar"];
7330
+ }
7331
+ if (isSerifTypographyRecipe(recipes)) {
7332
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
7333
+ }
7334
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
7335
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
7336
+ }
7337
+ return ["fine-line", "minimal", "soft-bar", "brand-bar"];
7338
+ case "centered":
7339
+ if (isSerifTypographyRecipe(recipes)) {
7340
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
7341
+ }
7342
+ if (isExpressiveRecipe(recipes)) {
7343
+ return ["brand-pill", "flat-tabs", "brand-bar", "fine-line"];
7344
+ }
7345
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
7346
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
7347
+ }
7348
+ return ["minimal", "fine-line", "soft-bar"];
7349
+ case "floating":
7350
+ if (isExpressiveRecipe(recipes)) {
7351
+ return ["glass", "split-glass", "brand-pill", "soft-shell"];
7352
+ }
7353
+ if (isSerifTypographyRecipe(recipes)) {
7354
+ return ["split-pill", "minimal-surface", "soft-shell"];
7355
+ }
7356
+ return ["soft-shell", "minimal-surface", "glass"];
7357
+ default:
7358
+ return [];
7359
+ }
7360
+ }
7361
+ function isExpressiveRecipe(recipes) {
7362
+ return recipes.contrast === "maximum" || recipes.shadow === "layered" || recipes.motion === "expressive";
7363
+ }
7364
+ function isSerifTypographyRecipe(recipes) {
7365
+ return recipes.typography === "serif-editorial" || recipes.typography === "classic-serif";
7366
+ }
7367
+ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
6815
7368
  const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
6816
7369
  (selection) => Boolean(selection)
6817
7370
  );
@@ -6824,8 +7377,15 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
6824
7377
  );
6825
7378
  const stylesByLayout = {};
6826
7379
  for (const layoutChoice of layoutChoices) {
6827
- const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
6828
- stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
7380
+ const legacyStyleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
7381
+ const inferredStyleChoices = inferredHeaderStyleValuesForRecipes(
7382
+ layoutChoice.id,
7383
+ recipes
7384
+ ).map((styleId) => headerStyleChoice(styleId));
7385
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = uniqueCompatibleHeaderStyleChoices(
7386
+ [...legacyStyleChoices, ...inferredStyleChoices],
7387
+ layoutChoice.id
7388
+ );
6829
7389
  }
6830
7390
  return {
6831
7391
  defaultHeaderSelection,
@@ -6867,17 +7427,20 @@ function defaultTypographyPresetChoicesForRecipe(recipe) {
6867
7427
  function getCuratedSiteStyle(id) {
6868
7428
  return curatedSiteStylesById.get(id) ?? null;
6869
7429
  }
6870
- var curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, expressiveUnderlineInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
7430
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, expressiveUnderlineInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
6871
7431
  var init_curatedSiteStyles = __esm({
6872
7432
  "../theme-core/src/site-styles/curatedSiteStyles.ts"() {
6873
7433
  init_personalities();
6874
7434
  init_variants();
7435
+ init_siteStyleDefaults();
6875
7436
  init_headerLooks();
6876
7437
  init_footerLooks();
6877
7438
  init_curatedChoices();
6878
7439
  init_sourceCatalogs();
6879
7440
  init_types2();
6880
7441
  init_typographyPresets();
7442
+ SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
7443
+ SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
6881
7444
  curatedSiteStyleIdValues = [
6882
7445
  "site-style:calm-studio",
6883
7446
  "site-style:clear-professional",
@@ -6889,7 +7452,7 @@ var init_curatedSiteStyles = __esm({
6889
7452
  "site-style:personal-retreat-journal",
6890
7453
  "site-style:tactile-workshop",
6891
7454
  "site-style:modern-wellness",
6892
- "site-style:soft-earth",
7455
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
6893
7456
  "site-style:bold-launch",
6894
7457
  "site-style:south-west-twerk-school"
6895
7458
  ];
@@ -7336,10 +7899,10 @@ var init_curatedSiteStyles = __esm({
7336
7899
  ]
7337
7900
  }),
7338
7901
  defineCuratedSiteStyle({
7339
- id: "site-style:soft-earth",
7902
+ id: SOFT_EARTH_SITE_STYLE_ID,
7340
7903
  name: "Soft Earth",
7341
7904
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
7342
- generationBrief: "Use cream space, terracotta CTAs, olive proof bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community proof, and a simple two-column FAQ when content allows.",
7905
+ generationBrief: "Use cream space, terracotta CTAs, olive quote bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community quotes, and an FAQ with a full-width intro above two columns of questions when content allows.",
7343
7906
  siteCreatorSelection: {
7344
7907
  kind: "site_creator_keyword_heuristic",
7345
7908
  priority: 45
@@ -7409,14 +7972,18 @@ var init_curatedSiteStyles = __esm({
7409
7972
  paragraphSize: "default",
7410
7973
  headingSize: "editorial"
7411
7974
  }
7412
- }
7975
+ },
7976
+ accordions: softEarthAccordionSystem
7977
+ },
7978
+ defaultBlockVariants: {
7979
+ "block.faq": "question-columns"
7413
7980
  },
7414
7981
  recommendedAppearancePresetIds: [
7415
7982
  "hero-brand-scrim",
7416
- "intro-soft-earth-statement",
7417
- "feature-cards-soft-earth-offerings",
7418
- "testimonials-soft-earth-proof-band",
7419
- "faq-soft-earth-two-column",
7983
+ "intro-organic-statement",
7984
+ "feature-cards-raised-rule",
7985
+ "events-lined-panel",
7986
+ "testimonials-brand-background-quotes",
7420
7987
  "contact-form-panel"
7421
7988
  ],
7422
7989
  recommendedHeaderLookIds: [
@@ -7520,7 +8087,7 @@ var init_curatedSiteStyles = __esm({
7520
8087
  "hero-brand-scrim-fixed-frame",
7521
8088
  "body-text-editorial-intro",
7522
8089
  "schedule-details-brand-depth",
7523
- "testimonials-accent-quote-proof",
8090
+ "testimonials-accent-quote-cards",
7524
8091
  "contact-form-brand-depth-card"
7525
8092
  ],
7526
8093
  recommendedHeaderLookIds: [
@@ -7687,6 +8254,7 @@ var init_rawStyleFields = __esm({
7687
8254
  ];
7688
8255
  themeV2BlockSpecificRawStyleFieldNames = [
7689
8256
  "_contentCardStyles",
8257
+ "_heroLayoutStyles",
7690
8258
  "_textCardStyles"
7691
8259
  ];
7692
8260
  themeV2NormalEditorRawStyleFieldNames = [
@@ -7696,6 +8264,10 @@ var init_rawStyleFields = __esm({
7696
8264
  new Set(
7697
8265
  themeV2NormalEditorRawStyleFieldNames
7698
8266
  );
8267
+ [
8268
+ ...themeV2RuntimeStyleFieldNames,
8269
+ ...themeV2BlockSpecificRawStyleFieldNames
8270
+ ];
7699
8271
  }
7700
8272
  });
7701
8273
  function uniqueNonEmpty(values) {
@@ -7706,7 +8278,7 @@ function uniqueNonEmpty(values) {
7706
8278
  }
7707
8279
  return [firstValue, ...uniqueValues.slice(1)];
7708
8280
  }
7709
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
8281
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, heroCompositionIntentSchema, heroTypographyScaleIntentSchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eventListTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
7710
8282
  var init_designState = __esm({
7711
8283
  "../theme-core/src/site-styles/designState.ts"() {
7712
8284
  init_sourceCatalogs();
@@ -7726,6 +8298,16 @@ var init_designState = __esm({
7726
8298
  "scrim-gradient",
7727
8299
  "solid-panel"
7728
8300
  ]);
8301
+ heroCompositionIntentSchema = z.enum([
8302
+ "center",
8303
+ "bottom-left"
8304
+ ]);
8305
+ heroTypographyScaleIntentSchema = z.enum([
8306
+ "quiet",
8307
+ "editorial",
8308
+ "display",
8309
+ "poster"
8310
+ ]);
7729
8311
  sectionHeightIntentSchema = z.enum([
7730
8312
  "default",
7731
8313
  "banner",
@@ -7761,6 +8343,7 @@ var init_designState = __esm({
7761
8343
  ]);
7762
8344
  testimonialCardTreatmentSchema = z.enum(["default", "accent-quote"]);
7763
8345
  tileTreatmentSchema = z.enum(tileTreatmentValues);
8346
+ eventListTreatmentSchema = z.enum(eventListTreatmentValues);
7764
8347
  eyebrowTreatmentSchema = z.enum(eyebrowTreatmentValues);
7765
8348
  userPanelTreatments = uniqueNonEmpty(
7766
8349
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
@@ -7794,10 +8377,13 @@ var init_designState = __esm({
7794
8377
  emphasis: z.enum(userDesignOptionCatalog.emphases),
7795
8378
  sectionHeight: sectionHeightIntentSchema.optional(),
7796
8379
  heroLegibility: heroLegibilityStrategySchema.optional(),
8380
+ heroComposition: heroCompositionIntentSchema.optional(),
8381
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
7797
8382
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7798
8383
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7799
8384
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
7800
8385
  tileTreatment: tileTreatmentSchema.optional(),
8386
+ eventListTreatment: eventListTreatmentSchema.optional(),
7801
8387
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
7802
8388
  }).strict();
7803
8389
  styleAuthoritySchema = z.discriminatedUnion("kind", [
@@ -9249,6 +9835,7 @@ function styledSection(config2) {
9249
9835
  renderBackgroundImage = true,
9250
9836
  backgroundImageLoading,
9251
9837
  backgroundImageFetchPriority,
9838
+ allowOverflow = false,
9252
9839
  fullWidthPath
9253
9840
  } = config2;
9254
9841
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
@@ -9283,7 +9870,7 @@ function styledSection(config2) {
9283
9870
  // No fallback needed - transform handles all cases via defaultSpacing
9284
9871
  }
9285
9872
  },
9286
- allowOverflow: {
9873
+ allowOverflow: allowOverflow ? true : {
9287
9874
  $bind: {
9288
9875
  from: `${bindFrom}.background`,
9289
9876
  transforms: [{ id: "background.resolveAllowOverflow" }],
@@ -9847,7 +10434,10 @@ function hasFixedFrameBackgroundMotion(value) {
9847
10434
  function isTileTreatment(value) {
9848
10435
  return typeof value === "string" && tileTreatmentSet.has(value);
9849
10436
  }
9850
- var spacingTransform, raisedTransform, roundedTransform, boxStylesCompositeTransform, boxStylesBorderColorTransform, fixedFrameScopeClass, tileTreatmentClassMap, tileTreatmentSet, sectionClassNameTransform, containerStylesResolveClassName, containerStylesResolveBoxClassName, sectionTextColorStyleTransform, sectionHeadingColorStyleTransform, sectionColorsStyleTransform, GAP_CLASS_MAP, GAP_VALUE_MAP, semanticGapTransform, semanticGapValueTransform, boxStylesTransforms;
10437
+ function isEventListTreatment(value) {
10438
+ return typeof value === "string" && eventListTreatmentSet.has(value);
10439
+ }
10440
+ var spacingTransform, raisedTransform, roundedTransform, boxStylesCompositeTransform, boxStylesBorderColorTransform, fixedFrameScopeClass, tileTreatmentClassMap, tileTreatmentSet, eventListTreatmentClassMap, eventListTreatmentSet, sectionClassNameTransform, containerStylesResolveClassName, containerStylesResolveBoxClassName, sectionTextColorStyleTransform, sectionHeadingColorStyleTransform, sectionColorsStyleTransform, GAP_CLASS_MAP, GAP_VALUE_MAP, semanticGapTransform, semanticGapValueTransform, boxStylesTransforms;
9851
10441
  var init_boxStyles2 = __esm({
9852
10442
  "../blocks/src/system/transforms/registry/boxStyles.ts"() {
9853
10443
  init_core3();
@@ -10021,6 +10611,11 @@ var init_boxStyles2 = __esm({
10021
10611
  "brand-depth": "rb-tile-treatment-brand-depth"
10022
10612
  };
10023
10613
  tileTreatmentSet = new Set(tileTreatmentValues);
10614
+ eventListTreatmentClassMap = {
10615
+ plain: "",
10616
+ "lined-panel": "rb-event-list-treatment-lined-panel"
10617
+ };
10618
+ eventListTreatmentSet = new Set(eventListTreatmentValues);
10024
10619
  sectionClassNameTransform = {
10025
10620
  id: "sectionStyles.resolveClassName",
10026
10621
  kind: "string",
@@ -10088,6 +10683,17 @@ var init_boxStyles2 = __esm({
10088
10683
  `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
10089
10684
  );
10090
10685
  }
10686
+ const eventListTreatment = input?.eventListTreatment;
10687
+ if (isEventListTreatment(eventListTreatment)) {
10688
+ const eventListTreatmentClass = eventListTreatmentClassMap[eventListTreatment];
10689
+ if (eventListTreatmentClass) {
10690
+ classes.push(eventListTreatmentClass);
10691
+ }
10692
+ } else if (typeof eventListTreatment === "string" && process.env.NODE_ENV !== "production") {
10693
+ console.warn(
10694
+ `[sectionStyles] Invalid eventListTreatment value in _sectionStyles: "${eventListTreatment}". Expected one of: ${eventListTreatmentValues.join(", ")}.`
10695
+ );
10696
+ }
10091
10697
  if (hasFixedFrameBackgroundMotion(input)) {
10092
10698
  classes.push(fixedFrameScopeClass);
10093
10699
  }
@@ -10563,6 +11169,41 @@ var init_sectionState = __esm({
10563
11169
  }
10564
11170
  });
10565
11171
 
11172
+ // ../blocks/src/system/node/fragments/headingDecoration.ts
11173
+ function headingDecoration({
11174
+ bindFrom = defaultBindFrom,
11175
+ family,
11176
+ placement,
11177
+ className
11178
+ }) {
11179
+ return el(
11180
+ "div",
11181
+ {
11182
+ "aria-hidden": "true",
11183
+ className: {
11184
+ $bind: {
11185
+ from: bindFrom,
11186
+ transforms: [
11187
+ {
11188
+ id: "ui.headingDecorationClassName",
11189
+ options: { baseClass: className, family }
11190
+ }
11191
+ ]
11192
+ }
11193
+ }
11194
+ },
11195
+ null,
11196
+ when(`${bindFrom}.placement`, { equals: placement })
11197
+ );
11198
+ }
11199
+ var defaultBindFrom;
11200
+ var init_headingDecoration = __esm({
11201
+ "../blocks/src/system/node/fragments/headingDecoration.ts"() {
11202
+ init_builder();
11203
+ defaultBindFrom = "_sectionStyles.headingDecoration";
11204
+ }
11205
+ });
11206
+
10566
11207
  // ../blocks/src/system/node/fragments/index.ts
10567
11208
  var init_fragments = __esm({
10568
11209
  "../blocks/src/system/node/fragments/index.ts"() {
@@ -10584,6 +11225,7 @@ var init_fragments = __esm({
10584
11225
  init_sectionState();
10585
11226
  init_classNameBinding();
10586
11227
  init_eyebrow();
11228
+ init_headingDecoration();
10587
11229
  }
10588
11230
  });
10589
11231
  function defineFragment(config2) {
@@ -11400,6 +12042,7 @@ var init_testimonialsHeading = __esm({
11400
12042
  "../blocks/src/system/fragments/library/testimonialsHeading.ts"() {
11401
12043
  init_types13();
11402
12044
  init_builder();
12045
+ init_headingDecoration();
11403
12046
  init_colorStyles();
11404
12047
  testimonialsHeadingFragment = defineFragment({
11405
12048
  id: "testimonialsHeading",
@@ -11430,6 +12073,10 @@ var init_testimonialsHeading = __esm({
11430
12073
  when("content.heading"),
11431
12074
  bind("content.heading")
11432
12075
  ),
12076
+ headingDecoration({
12077
+ family: "short-center-rule",
12078
+ placement: "under-centered-heading"
12079
+ }),
11433
12080
  text(
11434
12081
  {
11435
12082
  as: "p",
@@ -12221,6 +12868,41 @@ var init_faqHeading = __esm({
12221
12868
  });
12222
12869
 
12223
12870
  // ../blocks/src/system/fragments/library/faqAccordion.ts
12871
+ function createFaqAccordionLayout(options = {}) {
12872
+ return accordionList({
12873
+ collection: "content.items",
12874
+ itemName: "faqItem",
12875
+ indexName: "faqIndex",
12876
+ accordionProps: {
12877
+ className: options.rootClassName ?? "accordion-root",
12878
+ type: "single",
12879
+ collapsible: true
12880
+ },
12881
+ itemProps: {
12882
+ className: {
12883
+ $bind: {
12884
+ from: "content._cardStyles",
12885
+ transforms: [
12886
+ {
12887
+ id: "boxStyles.all",
12888
+ options: {
12889
+ axis: "all",
12890
+ includeSpacing: false,
12891
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
12892
+ }
12893
+ }
12894
+ ]
12895
+ },
12896
+ fallback: "rb-faq-item"
12897
+ },
12898
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
12899
+ // Legacy theme accordion style
12900
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
12901
+ },
12902
+ triggerFrom: "faqItem.question",
12903
+ contentFrom: "faqItem.answer"
12904
+ });
12905
+ }
12224
12906
  var faqAccordionFragment;
12225
12907
  var init_faqAccordion = __esm({
12226
12908
  "../blocks/src/system/fragments/library/faqAccordion.ts"() {
@@ -12259,40 +12941,7 @@ var init_faqAccordion = __esm({
12259
12941
  }
12260
12942
  }
12261
12943
  ],
12262
- layout: accordionList({
12263
- collection: "content.items",
12264
- itemName: "faqItem",
12265
- indexName: "faqIndex",
12266
- accordionProps: {
12267
- className: "accordion-root",
12268
- // CSS-first: all styling handled by theme CSS
12269
- type: "single",
12270
- collapsible: true
12271
- },
12272
- itemProps: {
12273
- className: {
12274
- $bind: {
12275
- from: "content._cardStyles",
12276
- transforms: [
12277
- {
12278
- id: "boxStyles.all",
12279
- options: {
12280
- axis: "all",
12281
- includeSpacing: false,
12282
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden rb-border"
12283
- }
12284
- }
12285
- ]
12286
- },
12287
- fallback: "rb-faq-item"
12288
- },
12289
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
12290
- // Legacy theme accordion style
12291
- iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
12292
- },
12293
- triggerFrom: "faqItem.question",
12294
- contentFrom: "faqItem.answer"
12295
- })
12944
+ layout: createFaqAccordionLayout()
12296
12945
  });
12297
12946
  }
12298
12947
  });
@@ -14883,7 +15532,7 @@ var init_event_details = __esm({
14883
15532
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
14884
15533
  function getContainerClass(layout, columns) {
14885
15534
  if (layout === "compact") {
14886
- return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
15535
+ return "event-listing-compact-container rb-flex rb-flex-col";
14887
15536
  }
14888
15537
  if (layout === "stack") {
14889
15538
  return "rb-flex rb-flex-col rb-gap-6";
@@ -15462,6 +16111,7 @@ var init_shop_commerce_shared = __esm({
15462
16111
  z.object({
15463
16112
  kind: z.literal("product"),
15464
16113
  productId: z.string().min(1),
16114
+ productCategoryId: z.string().min(1).optional().nullable(),
15465
16115
  variantId: z.string().min(1).optional().nullable(),
15466
16116
  title: z.string().min(1),
15467
16117
  variantTitle: z.string().optional().nullable(),
@@ -20451,6 +21101,14 @@ var ENDPOINT_DEFINITIONS = {
20451
21101
  responseKind: "json",
20452
21102
  errors: []
20453
21103
  },
21104
+ applyDiscountCode: {
21105
+ path: "/public/sites/{siteId}/bookings/discounts/apply",
21106
+ method: "POST",
21107
+ tags: ["site-{siteId}", "booking-discounts"],
21108
+ auth: "public",
21109
+ responseKind: "json",
21110
+ errors: ["validation:invalid_input", "rate_limit:exceeded"]
21111
+ },
20454
21112
  // Batch endpoint for block loader requests (reduces SSR fan-out)
20455
21113
  batchBlockLoaders: {
20456
21114
  path: "/public/sites/{siteId}/block-loaders/batch",
@@ -23869,6 +24527,7 @@ var microLayout = styledSection({
23869
24527
  function splitLayoutWith(children) {
23870
24528
  return styledSection({
23871
24529
  children: styledContainer({
24530
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
23872
24531
  children: {
23873
24532
  type: "grid",
23874
24533
  props: {
@@ -23893,6 +24552,7 @@ function splitLayoutWith(children) {
23893
24552
  // The split variants render the image as a real grid column, so suppress
23894
24553
  // the default absolute background image layer while keeping color/overlay.
23895
24554
  renderBackgroundImage: false,
24555
+ allowOverflow: true,
23896
24556
  baseClass: ""
23897
24557
  });
23898
24558
  }
@@ -24054,6 +24714,21 @@ function introHeading(className) {
24054
24714
  bind("content.title")
24055
24715
  );
24056
24716
  }
24717
+ function introHeadingGroup(className) {
24718
+ return stack(
24719
+ {
24720
+ gap: "sm",
24721
+ className: "rb-intro-heading-group"
24722
+ },
24723
+ [
24724
+ introHeading(className),
24725
+ headingDecoration({
24726
+ family: "organic-squiggle",
24727
+ placement: "after-heading"
24728
+ })
24729
+ ]
24730
+ );
24731
+ }
24057
24732
  function introBody(className = "rb-prose rb-max-w-none") {
24058
24733
  return richText({ className }, bind("content.body"));
24059
24734
  }
@@ -24072,6 +24747,10 @@ function introCopyStack(options = {}) {
24072
24747
  },
24073
24748
  [
24074
24749
  introHeading(options.headingClassName ?? "rb-intro-title"),
24750
+ headingDecoration({
24751
+ family: "organic-squiggle",
24752
+ placement: "after-heading"
24753
+ }),
24075
24754
  introBody(options.bodyClassName),
24076
24755
  introCtas(options.ctaJustify)
24077
24756
  ]
@@ -24111,7 +24790,7 @@ var statementCopyLayout = styledSection({
24111
24790
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
24112
24791
  },
24113
24792
  [
24114
- introHeading("rb-intro-title rb-max-w-xl"),
24793
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
24115
24794
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
24116
24795
  introBody(),
24117
24796
  introCtas("start")
@@ -24132,7 +24811,7 @@ var statementMediaLayout = styledSection({
24132
24811
  className: "rb-intro rb-intro-statement-media rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-3 rb-lg-items-center"
24133
24812
  },
24134
24813
  [
24135
- introHeading("rb-intro-title rb-max-w-xl"),
24814
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
24136
24815
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
24137
24816
  introBody(),
24138
24817
  introCtas("start")
@@ -24871,6 +25550,7 @@ init_fragments();
24871
25550
  init_styledSection();
24872
25551
  init_defineBlock();
24873
25552
  init_fragments2();
25553
+ init_faqAccordion();
24874
25554
  init_builder();
24875
25555
  init_boxStyles();
24876
25556
  var faqComposition = composeFragments([
@@ -24885,6 +25565,9 @@ function isNodeDefinitionArray(layout) {
24885
25565
  }
24886
25566
  var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
24887
25567
  var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
25568
+ var questionColumnsAccordionLayout = createFaqAccordionLayout({
25569
+ rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
25570
+ });
24888
25571
  var defaultLayout = styledSection({
24889
25572
  children: styledContainer({
24890
25573
  baseClassName: "rb-relative rb-isolate",
@@ -24898,11 +25581,24 @@ var twoColumnLayout = styledSection({
24898
25581
  children: el(
24899
25582
  "div",
24900
25583
  {
24901
- className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
25584
+ className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
24902
25585
  },
24903
25586
  [
24904
- el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
24905
- el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
25587
+ el("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]),
25588
+ el("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])
25589
+ ]
25590
+ )
25591
+ }),
25592
+ baseClass: ""
25593
+ });
25594
+ var questionColumnsLayout = styledSection({
25595
+ children: styledContainer({
25596
+ baseClassName: "rb-relative rb-isolate",
25597
+ children: stack(
25598
+ { gap: "xl", className: "rb-w-full" },
25599
+ [
25600
+ headingLayout,
25601
+ questionColumnsAccordionLayout
24906
25602
  ]
24907
25603
  )
24908
25604
  }),
@@ -24927,7 +25623,8 @@ var faqManifest = createBlockManifest({
24927
25623
  layout: defaultLayout,
24928
25624
  variants: {
24929
25625
  default: defaultLayout,
24930
- "two-column": twoColumnLayout
25626
+ "two-column": twoColumnLayout,
25627
+ "question-columns": questionColumnsLayout
24931
25628
  },
24932
25629
  defaultVariant: "default",
24933
25630
  variantOptions: {
@@ -24938,6 +25635,10 @@ var faqManifest = createBlockManifest({
24938
25635
  "two-column": {
24939
25636
  label: "Two column",
24940
25637
  description: "A left heading column with FAQ items on the right."
25638
+ },
25639
+ "question-columns": {
25640
+ label: "Question columns",
25641
+ description: "A full-width heading above FAQ items split into two columns."
24941
25642
  }
24942
25643
  },
24943
25644
  description: "Accordion of frequently asked questions and answers.",
@@ -25064,9 +25765,21 @@ var eyebrowTreatmentClassMap = {
25064
25765
  "accent-pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent rb-eyebrow-treatment-pill-bounce"
25065
25766
  };
25066
25767
  var eyebrowTreatmentSet = new Set(eyebrowTreatmentValues);
25768
+ var headingDecorationFamilySet = new Set(visibleHeadingDecorationFamilyValues);
25769
+ var headingDecorationPlacementSet = new Set(visibleHeadingDecorationPlacementValues);
25770
+ var headingDecorationColorTokenSet = new Set(headingDecorationColorTokenValues);
25067
25771
  function isEyebrowTreatment(value) {
25068
25772
  return typeof value === "string" && eyebrowTreatmentSet.has(value);
25069
25773
  }
25774
+ function isHeadingDecorationFamily(value) {
25775
+ return typeof value === "string" && headingDecorationFamilySet.has(value);
25776
+ }
25777
+ function isHeadingDecorationPlacement(value) {
25778
+ return typeof value === "string" && headingDecorationPlacementSet.has(value);
25779
+ }
25780
+ function isHeadingDecorationColorToken(value) {
25781
+ return typeof value === "string" && headingDecorationColorTokenSet.has(value);
25782
+ }
25070
25783
  var imageGalleryCornerClassMap = {
25071
25784
  none: "",
25072
25785
  sm: "rb-rounded-sm",
@@ -25170,6 +25883,10 @@ var sectionStateToneTransform = {
25170
25883
  summary: "Map semantic section-state kind to feedback tone",
25171
25884
  run: (value) => sectionStateToneFromUnknown(value)
25172
25885
  };
25886
+ var heroTitleLengthThresholds = {
25887
+ medium: { maxCharacters: 42, maxWords: 6 },
25888
+ long: { maxCharacters: 78, maxWords: 11 }
25889
+ };
25173
25890
  function isPlainObject2(value) {
25174
25891
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
25175
25892
  }
@@ -25177,6 +25894,14 @@ function readString(obj, key) {
25177
25894
  const v = obj[key];
25178
25895
  return typeof v === "string" ? v : void 0;
25179
25896
  }
25897
+ function resolveGeneratedHeroLayoutStyles(content) {
25898
+ const raw = content._heroLayoutStyles;
25899
+ return isPlainObject2(raw) ? raw : null;
25900
+ }
25901
+ function readHeroLayoutString(content, generatedKey, fallbackKey = generatedKey) {
25902
+ const generated = resolveGeneratedHeroLayoutStyles(content);
25903
+ return generated && typeof generated[generatedKey] === "string" ? generated[generatedKey] : readString(content, fallbackKey);
25904
+ }
25180
25905
  function resolveHeroVariant(content) {
25181
25906
  const variant = readString(content, "variant");
25182
25907
  if (variant && variant.trim()) return variant.trim();
@@ -25185,14 +25910,14 @@ function resolveHeroVariant(content) {
25185
25910
  return null;
25186
25911
  }
25187
25912
  function resolveHeroContentAlignment(content) {
25188
- const raw = readString(content, "contentAlignment");
25913
+ const raw = readHeroLayoutString(content, "contentAlignment");
25189
25914
  if (raw === "left" || raw === "center" || raw === "right") return raw;
25190
25915
  const variant = resolveHeroVariant(content);
25191
25916
  if (variant === "split" || variant === "splitReverse") return "left";
25192
25917
  return "center";
25193
25918
  }
25194
25919
  function resolveHeroVerticalAlignment(content) {
25195
- const raw = readString(content, "verticalAlignment");
25920
+ const raw = readHeroLayoutString(content, "verticalAlignment");
25196
25921
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
25197
25922
  const sectionStyles = asPartialObject(content._sectionStyles);
25198
25923
  const minHeight = sectionStyles?.minHeight;
@@ -25202,11 +25927,29 @@ function resolveHeroVerticalAlignment(content) {
25202
25927
  return "top";
25203
25928
  }
25204
25929
  function resolveHeroContentMaxWidth(content) {
25205
- const raw = readString(content, "contentMaxWidth");
25930
+ const raw = readHeroLayoutString(content, "contentMaxWidth");
25206
25931
  if (raw === "default" || raw === "narrow" || raw === "medium" || raw === "wide")
25207
25932
  return raw;
25208
25933
  return "default";
25209
25934
  }
25935
+ function resolveHeroTypographyScale(content) {
25936
+ const raw = readHeroLayoutString(
25937
+ content,
25938
+ "typographyScale",
25939
+ "heroTypographyScale"
25940
+ );
25941
+ if (raw === "quiet" || raw === "editorial" || raw === "display" || raw === "poster") {
25942
+ return raw;
25943
+ }
25944
+ return null;
25945
+ }
25946
+ function resolveHeroTitleLength(content) {
25947
+ const headline = readString(content, "headline")?.trim() ?? "";
25948
+ const wordCount = headline.length === 0 ? 0 : headline.split(/\s+/).length;
25949
+ if (headline.length > heroTitleLengthThresholds.long.maxCharacters || wordCount > heroTitleLengthThresholds.long.maxWords) return "long";
25950
+ if (headline.length > heroTitleLengthThresholds.medium.maxCharacters || wordCount > heroTitleLengthThresholds.medium.maxWords) return "medium";
25951
+ return "short";
25952
+ }
25210
25953
  var heroContentWrapperClassSchema = z.object({
25211
25954
  base: z.string().optional()
25212
25955
  });
@@ -25219,6 +25962,8 @@ var heroContentWrapperClassTransform = {
25219
25962
  const content = isPlainObject2(value) ? value : isPlainObject2(context.data) ? context.data : {};
25220
25963
  const alignment = resolveHeroContentAlignment(content);
25221
25964
  const maxWidth = resolveHeroContentMaxWidth(content);
25965
+ const typographyScale = resolveHeroTypographyScale(content);
25966
+ const titleLength = resolveHeroTitleLength(content);
25222
25967
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
25223
25968
  const maxWidthClass = maxWidth === "narrow" ? "rb-max-w-2xl" : maxWidth === "medium" ? "rb-max-w-3xl" : maxWidth === "wide" ? "rb-max-w-5xl" : "";
25224
25969
  const positionClass = alignment === "center" ? "rb-mx-auto" : alignment === "right" ? "rb-ml-auto" : "";
@@ -25226,7 +25971,9 @@ var heroContentWrapperClassTransform = {
25226
25971
  options?.base,
25227
25972
  textAlignClass,
25228
25973
  maxWidthClass,
25229
- positionClass
25974
+ positionClass,
25975
+ typographyScale ? `rb-hero-typography-${typographyScale}` : "",
25976
+ `rb-hero-title-${titleLength}`
25230
25977
  ]);
25231
25978
  }
25232
25979
  };
@@ -25526,6 +26273,27 @@ var uiTransforms = [
25526
26273
  const treatment = isEyebrowTreatment(value) ? value : "plain";
25527
26274
  return joinClasses3([baseClass, eyebrowTreatmentClassMap[treatment]]);
25528
26275
  }
26276
+ },
26277
+ {
26278
+ id: "ui.headingDecorationClassName",
26279
+ kind: "string",
26280
+ summary: "Apply constrained Theme V2 heading decoration classes",
26281
+ run: (value, options) => {
26282
+ const baseClass = typeof options?.baseClass === "string" && options.baseClass.trim() ? options.baseClass : "rb-heading-decoration";
26283
+ const decoration = asPartialObject(value);
26284
+ const family = isHeadingDecorationFamily(decoration?.family) ? decoration.family : null;
26285
+ const allowedFamily = isHeadingDecorationFamily(options?.family) ? options.family : null;
26286
+ const placement = isHeadingDecorationPlacement(decoration?.placement) ? decoration.placement : null;
26287
+ const colorToken = isHeadingDecorationColorToken(decoration?.colorToken) ? decoration.colorToken : "primary";
26288
+ if (!family || !placement) return "rb-hidden";
26289
+ if (allowedFamily && family !== allowedFamily) return "rb-hidden";
26290
+ return joinClasses3([
26291
+ baseClass,
26292
+ `rb-heading-decoration-${family}`,
26293
+ `rb-heading-decoration-placement-${placement}`,
26294
+ `rb-heading-decoration-color-${colorToken}`
26295
+ ]);
26296
+ }
25529
26297
  }
25530
26298
  ];
25531
26299
 
@@ -25533,6 +26301,42 @@ var uiTransforms = [
25533
26301
  init_colorConversion();
25534
26302
  init_core3();
25535
26303
  init_colorStyles();
26304
+
26305
+ // ../theme-core/src/siteChromePlacement.ts
26306
+ init_types2();
26307
+ var HEADER_POSITIONINGS = ["static", "sticky", "fixed"];
26308
+ function parseHeaderPositioning(value) {
26309
+ return isHeaderPositioning(value) ? value : "static";
26310
+ }
26311
+ function isHeaderPositioning(value) {
26312
+ return typeof value === "string" && HEADER_POSITIONINGS.includes(value);
26313
+ }
26314
+ function planSiteChromePlacement(positioning) {
26315
+ switch (positioning) {
26316
+ case "static":
26317
+ return {
26318
+ kind: "static",
26319
+ headerRootClassName: null,
26320
+ standaloneShellClassName: null
26321
+ };
26322
+ case "sticky":
26323
+ return {
26324
+ kind: "sticky",
26325
+ headerRootClassName: "rb-sticky rb-top-0",
26326
+ standaloneShellClassName: "sticky top-0 z-40 w-full"
26327
+ };
26328
+ case "fixed":
26329
+ return {
26330
+ kind: "fixed",
26331
+ headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
26332
+ standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
26333
+ };
26334
+ default:
26335
+ return assertNever3(positioning);
26336
+ }
26337
+ }
26338
+
26339
+ // ../blocks/src/system/transforms/registry/layout.ts
25536
26340
  var joinClasses4 = (parts) => parts.filter(
25537
26341
  (part) => typeof part === "string" && part.trim().length > 0
25538
26342
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -25648,7 +26452,8 @@ var headerRootClassTransform = {
25648
26452
  ...options
25649
26453
  };
25650
26454
  const content = asPartialObject(value) ?? {};
25651
- const positioning = typeof content.positioning === "string" ? content.positioning : "static";
26455
+ const positioning = parseHeaderPositioning(content.positioning);
26456
+ const placement = planSiteChromePlacement(positioning);
25652
26457
  const shrinkOnScroll = Boolean(content.shrinkOnScroll);
25653
26458
  const header = asPartialObject(value);
25654
26459
  const visuals = resolveHeaderVisualStyles(header, context.theme);
@@ -25660,14 +26465,14 @@ var headerRootClassTransform = {
25660
26465
  if (config2.blur) classes.push(config2.blur);
25661
26466
  if (config2.blurSupport) classes.push(config2.blurSupport);
25662
26467
  }
25663
- if (positioning === "sticky") {
26468
+ if (placement.kind === "sticky") {
25664
26469
  classes.push(
25665
26470
  visuals.isTransparent ? config2.stickyTransparent : config2.sticky
25666
26471
  );
25667
- } else if (positioning === "fixed") {
26472
+ } else if (placement.kind === "fixed") {
25668
26473
  classes.push(config2.fixed);
25669
26474
  }
25670
- if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
26475
+ if (shrinkOnScroll && placement.kind !== "static") {
25671
26476
  classes.push(config2.shrink);
25672
26477
  }
25673
26478
  const VALID_VARIANTS = [
@@ -26194,6 +26999,11 @@ function desktopOnlyDisplay(display) {
26194
26999
 
26195
27000
  // ../blocks/src/system/blocks/site-header.ts
26196
27001
  init_colorStyles();
27002
+
27003
+ // ../theme-core/src/siteChromeOverlayClearance.ts
27004
+ var SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
27005
+
27006
+ // ../blocks/src/system/blocks/site-header.ts
26197
27007
  var logoRow = link(
26198
27008
  {
26199
27009
  href: "/",
@@ -26465,6 +27275,7 @@ var transparentLayout = inline(
26465
27275
  );
26466
27276
  var floatingLayout = inline(
26467
27277
  {
27278
+ [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
26468
27279
  className: bindProp("$root.theme.header.maxWidth", {
26469
27280
  transforms: pipe(
26470
27281
  tx("layout.maxWidthClass", {
@@ -27447,6 +28258,10 @@ var sectionHeading = stack(
27447
28258
  when("content.title"),
27448
28259
  bind("content.title")
27449
28260
  ),
28261
+ headingDecoration({
28262
+ family: "short-center-rule",
28263
+ placement: "under-centered-heading"
28264
+ }),
27450
28265
  richText(
27451
28266
  {
27452
28267
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -32724,6 +33539,10 @@ var scheduleTileTreatments = [
32724
33539
  "quiet",
32725
33540
  "brand-depth"
32726
33541
  ];
33542
+ var eventListTreatments = [
33543
+ "plain",
33544
+ "lined-panel"
33545
+ ];
32727
33546
  function scheduleDetailsCapable() {
32728
33547
  return declareBlockDesignCapability({
32729
33548
  sectionSurfaces: "supported",
@@ -32732,6 +33551,14 @@ function scheduleDetailsCapable() {
32732
33551
  tileTreatments: scheduleTileTreatments
32733
33552
  });
32734
33553
  }
33554
+ function eventListCapable() {
33555
+ return declareBlockDesignCapability({
33556
+ sectionSurfaces: "supported",
33557
+ contentFrames: ["plain"],
33558
+ itemSurfaces: "unsupported",
33559
+ eventListTreatments
33560
+ });
33561
+ }
32735
33562
  function defaultBoundaryBias(visualWeight) {
32736
33563
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
32737
33564
  }
@@ -32951,7 +33778,8 @@ var systemBlockDefinitionsRaw = [
32951
33778
  flow: bodyFlow,
32952
33779
  layoutProfiles: [
32953
33780
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
32954
- layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
33781
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
33782
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
32955
33783
  ]
32956
33784
  })),
32957
33785
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -33045,11 +33873,11 @@ var systemBlockDefinitionsRaw = [
33045
33873
  flow: offeringsFlow,
33046
33874
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "centered", weight: "featured" })]
33047
33875
  })),
33048
- withDesignCapability("block.event-listing", eventListingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
33876
+ withDesignCapability("block.event-listing", eventListingBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
33049
33877
  flow: offeringsFlow,
33050
33878
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
33051
33879
  })),
33052
- withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
33880
+ withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
33053
33881
  flow: offeringsFlow,
33054
33882
  layoutProfiles: [
33055
33883
  layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
@@ -33682,6 +34510,9 @@ var builtinTransformDefinitions = [
33682
34510
  ];
33683
34511
  createTransformRegistry(builtinTransformDefinitions);
33684
34512
 
34513
+ // ../theme-core/src/accordions/defaults.ts
34514
+ init_curatedSiteStyles();
34515
+
33685
34516
  // ../theme-core/src/runtime/buildThemeRuntime.ts
33686
34517
  init_expandPalette();
33687
34518
 
@@ -33705,6 +34536,8 @@ init_resolver();
33705
34536
 
33706
34537
  // ../theme-core/src/navigation/generateNavLinkCSS.ts
33707
34538
  init_types10();
34539
+ init_expandPalette();
34540
+ init_colorConversion();
33708
34541
  init_generateEffectsCSS();
33709
34542
 
33710
34543
  // ../theme-core/src/header/generateHeaderCss.ts
@@ -33967,6 +34800,14 @@ ${root} {
33967
34800
  `;
33968
34801
  }
33969
34802
 
34803
+ // ../theme-core/src/runtime/themeCssVarNames.ts
34804
+ var THEME_RADIUS_CSS_VARS = {
34805
+ block: "--rb-block-radius",
34806
+ input: "--rb-input-radius",
34807
+ legacyCard: "--radius-card",
34808
+ legacyControl: "--radius-control"
34809
+ };
34810
+
33970
34811
  // ../theme-core/src/blocks/vars/customer-portal.ts
33971
34812
  function generateCustomerPortalVars({
33972
34813
  themeId
@@ -33980,6 +34821,11 @@ ${root} {
33980
34821
  --cp-muted: rgb(var(--tb-mutedText));
33981
34822
  --cp-border: rgb(var(--tb-border));
33982
34823
  --cp-shadow: var(--shadow-elev);
34824
+ --cp-primary: rgb(var(--tb-primary));
34825
+ --cp-primary-hover: rgb(var(--tb-primary-700, var(--tb-primary)));
34826
+ --cp-error: rgb(var(--tb-destructive));
34827
+ --cp-card-radius: var(${THEME_RADIUS_CSS_VARS.block}, var(${THEME_RADIUS_CSS_VARS.legacyCard}, 0.75rem));
34828
+ --cp-control-radius: var(${THEME_RADIUS_CSS_VARS.input}, var(${THEME_RADIUS_CSS_VARS.legacyControl}, 0.5rem));
33983
34829
 
33984
34830
  /* Shared tab bar (underline style) */
33985
34831
  --rb-tab-border-width: 1px;
@@ -34030,7 +34876,7 @@ ${root} {
34030
34876
  --rb-modal-bg: var(--cp-card-bg);
34031
34877
  --rb-modal-border: var(--cp-card-border);
34032
34878
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
34033
- --rb-modal-radius: var(--radius-card);
34879
+ --rb-modal-radius: var(--cp-card-radius);
34034
34880
  --rb-modal-max-width: 560px;
34035
34881
 
34036
34882
  /* Header */
@@ -36269,8 +37115,6 @@ function createBearerAPIClient(token, baseUrl) {
36269
37115
  };
36270
37116
  return createCMSClient(authHeaders, baseUrl);
36271
37117
  }
36272
-
36273
- // ../api/src/bookingVerticals.ts
36274
37118
  var VERTICAL_IDS = [
36275
37119
  "yoga_wellness",
36276
37120
  "fitness_pt",
@@ -36345,10 +37189,136 @@ var VERTICAL_BOOKING_PRESETS = [
36345
37189
  preset("community_wellbeing.retreats", "community_wellbeing", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats."),
36346
37190
  preset("venue_event_space.resource_hire", "venue_event_space", "appointment", "Hire slot", "Hire slots", "Future room, venue, and resource hire bookings.", "future")
36347
37191
  ];
36348
- new Set(VERTICAL_IDS);
36349
- new Set(
37192
+ var VERTICAL_ID_SET = new Set(VERTICAL_IDS);
37193
+ var VERTICAL_PRESET_ID_SET = new Set(
36350
37194
  VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id)
36351
37195
  );
37196
+ function parseVerticalId(value) {
37197
+ return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
37198
+ }
37199
+ function parseVerticalPresetId(value) {
37200
+ return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
37201
+ }
37202
+ function getVerticalPresetDefinition(presetId) {
37203
+ const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
37204
+ if (!definition) {
37205
+ throw new Error(`Unhandled vertical preset id: ${presetId}`);
37206
+ }
37207
+ return definition;
37208
+ }
37209
+ function toNonEmptyVerticalPresetIds(presetIds) {
37210
+ const firstPresetId = presetIds[0];
37211
+ return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
37212
+ }
37213
+ function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
37214
+ return {
37215
+ verticalId,
37216
+ selectedPresetIds
37217
+ };
37218
+ }
37219
+ function createSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
37220
+ const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
37221
+ return nonEmptyPresetIds ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
37222
+ }
37223
+ function resolveSiteVerticalBookingConfig(rawConfig) {
37224
+ if (!rawConfig) {
37225
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
37226
+ }
37227
+ const verticalId = parseVerticalId(rawConfig.verticalId);
37228
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
37229
+ const selectedPresetIds = rawPresetIds.map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
37230
+ const config2 = {
37231
+ verticalId,
37232
+ selectedPresetIds
37233
+ };
37234
+ if (!verticalId && selectedPresetIds.length === 0) {
37235
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
37236
+ }
37237
+ const issues = getSiteVerticalConfigIssues(rawConfig, config2);
37238
+ if (issues.length > 0) {
37239
+ return { kind: "invalid", config: config2, issues };
37240
+ }
37241
+ const configuredConfig = verticalId ? createSiteVerticalBookingConfig(verticalId, selectedPresetIds) : null;
37242
+ if (!configuredConfig) {
37243
+ return { kind: "invalid", config: config2, issues: ["empty_selected_presets"] };
37244
+ }
37245
+ return {
37246
+ kind: "configured",
37247
+ config: configuredConfig,
37248
+ selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
37249
+ };
37250
+ }
37251
+ function getSiteVerticalConfigIssues(rawConfig, config2) {
37252
+ const issues = /* @__PURE__ */ new Set();
37253
+ if (rawConfig.verticalId != null && !config2.verticalId) {
37254
+ issues.add("unknown_vertical");
37255
+ }
37256
+ if (!config2.verticalId && config2.selectedPresetIds.length > 0) {
37257
+ issues.add("missing_vertical");
37258
+ }
37259
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
37260
+ if (rawPresetIds.some((presetId) => parseVerticalPresetId(presetId) === null)) {
37261
+ issues.add("unknown_preset");
37262
+ }
37263
+ if (config2.verticalId && config2.selectedPresetIds.length === 0) {
37264
+ issues.add("empty_selected_presets");
37265
+ }
37266
+ const seenBehaviours = /* @__PURE__ */ new Set();
37267
+ for (const presetId of config2.selectedPresetIds) {
37268
+ const presetDefinition = getVerticalPresetDefinition(presetId);
37269
+ if (config2.verticalId && presetDefinition.verticalId !== config2.verticalId) {
37270
+ issues.add("preset_vertical_mismatch");
37271
+ }
37272
+ if (presetDefinition.availability === "future") {
37273
+ issues.add("future_preset_selected");
37274
+ }
37275
+ if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) {
37276
+ issues.add("duplicate_canonical_behaviour");
37277
+ }
37278
+ seenBehaviours.add(presetDefinition.canonicalBehaviour);
37279
+ }
37280
+ return [...issues];
37281
+ }
37282
+ var VerticalIdSchema = z.string().trim().transform((value, ctx) => {
37283
+ const parsed = parseVerticalId(value);
37284
+ if (!parsed) {
37285
+ ctx.addIssue({
37286
+ code: z.ZodIssueCode.custom,
37287
+ message: "Unknown booking vertical"
37288
+ });
37289
+ return z.NEVER;
37290
+ }
37291
+ return parsed;
37292
+ });
37293
+ var VerticalPresetIdSchema = z.string().trim().transform((value, ctx) => {
37294
+ const parsed = parseVerticalPresetId(value);
37295
+ if (!parsed) {
37296
+ ctx.addIssue({
37297
+ code: z.ZodIssueCode.custom,
37298
+ message: "Unknown booking preset"
37299
+ });
37300
+ return z.NEVER;
37301
+ }
37302
+ return parsed;
37303
+ });
37304
+ z.object({
37305
+ verticalId: VerticalIdSchema.nullable(),
37306
+ selectedPresetIds: z.array(VerticalPresetIdSchema).max(20)
37307
+ }).transform((value, ctx) => {
37308
+ const resolved = resolveSiteVerticalBookingConfig(value);
37309
+ if (resolved.kind === "invalid") {
37310
+ ctx.addIssue({
37311
+ code: z.ZodIssueCode.custom,
37312
+ message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
37313
+ });
37314
+ return z.NEVER;
37315
+ }
37316
+ return resolved.config;
37317
+ });
37318
+ var DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
37319
+ verticalId: null,
37320
+ selectedPresetIds: []
37321
+ };
36352
37322
  function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
36353
37323
  return {
36354
37324
  id,
@@ -36792,6 +37762,39 @@ function isNavigationMenuValidationItem(value) {
36792
37762
  if (!isRecord3(value)) return false;
36793
37763
  return typeof value.label === "string";
36794
37764
  }
37765
+
37766
+ // ../api/src/navigation/dashboardSiteNav.ts
37767
+ var hiddenDemoSiteNavSurfaceIds = [
37768
+ "site.newsletter"
37769
+ ];
37770
+ new Set(
37771
+ hiddenDemoSiteNavSurfaceIds
37772
+ );
37773
+ var websiteSurfaceIds = [
37774
+ "site.content",
37775
+ "site.footerBlocks",
37776
+ "site.navigation",
37777
+ "site.media",
37778
+ "site.style",
37779
+ "site.performance"
37780
+ ];
37781
+ new Set(
37782
+ websiteSurfaceIds
37783
+ );
37784
+
37785
+ // ../api/src/navigation/dashboardSettingsNav.ts
37786
+ var hiddenDemoSettingsNavSurfaceIds = [
37787
+ "settings.features",
37788
+ "settings.domains",
37789
+ "settings.bookings",
37790
+ "settings.emails",
37791
+ "settings.team",
37792
+ "settings.billing",
37793
+ "settings.developer",
37794
+ "settings.apiKeys",
37795
+ "settings.backup"
37796
+ ];
37797
+ new Set(hiddenDemoSettingsNavSurfaceIds);
36795
37798
  var Rfc6902PatchOp = z.discriminatedUnion("op", [
36796
37799
  // Standard RFC-6902 operations
36797
37800
  z.object({
@@ -45985,6 +46988,17 @@ function slugPart(value) {
45985
46988
  return value.trim().toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "");
45986
46989
  }
45987
46990
 
46991
+ // ../site-commands/src/pagePaths.ts
46992
+ var HOME_PAGE_COMMAND_SLUG = "home";
46993
+ var ROOT_PAGE_PATH = "/";
46994
+ function commandPageSlug(slug) {
46995
+ return slug === "" ? HOME_PAGE_COMMAND_SLUG : slug.replace(/^\/+/u, "");
46996
+ }
46997
+ function normalizedPagePath(slug) {
46998
+ const commandSlug = commandPageSlug(slug);
46999
+ return commandSlug === HOME_PAGE_COMMAND_SLUG ? ROOT_PAGE_PATH : `/${commandSlug}`;
47000
+ }
47001
+
45988
47002
  // ../site-commands/src/commands.ts
45989
47003
  var commandRefSchema = z.string().regex(commandRefPattern).transform((value) => value);
45990
47004
  var siteCommandSiteRefSchema = z.string().regex(siteCommandSiteRefPattern).transform((value) => value);
@@ -47028,10 +48042,6 @@ function isValidIanaTimezone(value) {
47028
48042
  return false;
47029
48043
  }
47030
48044
  }
47031
- function normalizedPagePath(slug) {
47032
- const commandSlug = slug === "" ? "home" : slug.replace(/^\/+/u, "");
47033
- return commandSlug === "home" ? "/" : `/${commandSlug}`;
47034
- }
47035
48045
 
47036
48046
  // ../site-commands/src/domain.ts
47037
48047
  var unsafeAsSiteCommandIdempotencyKey = (value) => value;
@@ -56506,7 +57516,7 @@ var SimpleCache = class {
56506
57516
  };
56507
57517
 
56508
57518
  // src/version.ts
56509
- var SDK_VERSION = "0.77.1";
57519
+ var SDK_VERSION = "0.78.0";
56510
57520
 
56511
57521
  // src/client/error.ts
56512
57522
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -56651,6 +57661,16 @@ var RiverbankApiError = class _RiverbankApiError extends Error {
56651
57661
  return lines.join("\n");
56652
57662
  }
56653
57663
  };
57664
+ var resilienceStatusSymbol = /* @__PURE__ */ Symbol.for("riverbankcms.sdk.resilienceStatus");
57665
+ function attachResilienceStatusToError(error, resilienceStatus) {
57666
+ const target = error !== null && (typeof error === "object" || typeof error === "function") ? error : new Error(error === void 0 ? "Unknown error" : String(error));
57667
+ Object.defineProperty(target, resilienceStatusSymbol, {
57668
+ configurable: true,
57669
+ enumerable: false,
57670
+ value: resilienceStatus
57671
+ });
57672
+ return target;
57673
+ }
56654
57674
 
56655
57675
  // src/client/resilience.ts
56656
57676
  var DEFAULT_RETRY_CONFIG2 = {
@@ -56909,7 +57929,9 @@ var CircuitOpenError = class extends Error {
56909
57929
  var prebuildModule = null;
56910
57930
  function tryRequire(modulePath) {
56911
57931
  try {
56912
- const req = Function('return typeof require === "function" ? require : null')();
57932
+ const req = Function(
57933
+ 'return typeof require === "function" ? require : null'
57934
+ )();
56913
57935
  return req ? req(modulePath) : null;
56914
57936
  } catch {
56915
57937
  return null;
@@ -56928,7 +57950,9 @@ function getPrebuildModule() {
56928
57950
  return null;
56929
57951
  }
56930
57952
  try {
56931
- prebuildModule = tryRequire("../prebuild/loader");
57953
+ prebuildModule = tryRequire(
57954
+ "../prebuild/loader"
57955
+ );
56932
57956
  return prebuildModule;
56933
57957
  } catch {
56934
57958
  return null;
@@ -56988,7 +58012,9 @@ function normalizePublicFormResult(result) {
56988
58012
  }
56989
58013
  function normalizePublicFormsResponse(response) {
56990
58014
  return {
56991
- forms: response.forms.map((form2) => normalizePublicFormResponse({ form: form2 }).form)
58015
+ forms: response.forms.map(
58016
+ (form2) => normalizePublicFormResponse({ form: form2 }).form
58017
+ )
56992
58018
  };
56993
58019
  }
56994
58020
  function normalizePublicFormsResult(result) {
@@ -57187,7 +58213,10 @@ function createRiverbankClient(config2) {
57187
58213
  isDegraded = nowDegraded;
57188
58214
  config2.resilience?.onDegradedMode?.(nowDegraded, status);
57189
58215
  }
57190
- return data;
58216
+ return {
58217
+ data,
58218
+ resilience: status
58219
+ };
57191
58220
  }
57192
58221
  async function resilientFetch(cacheKey, fetcher, options) {
57193
58222
  const requestId = generateRequestId2();
@@ -57211,25 +58240,43 @@ function createRiverbankClient(config2) {
57211
58240
  if (allowFallbacks && !isPreview && staleIfError) {
57212
58241
  const stale = cache.getStale(cacheKey);
57213
58242
  if (stale) {
57214
- return emitStatus("stale", stale.value, statusDetails({
57215
- staleAgeSec: stale.staleAgeSec,
57216
- error: { code: "circuit_open", message: "Circuit breaker is open" }
57217
- }));
58243
+ return emitStatus(
58244
+ "stale",
58245
+ stale.value,
58246
+ statusDetails({
58247
+ staleAgeSec: stale.staleAgeSec,
58248
+ error: {
58249
+ code: "circuit_open",
58250
+ message: "Circuit breaker is open"
58251
+ }
58252
+ })
58253
+ );
57218
58254
  }
57219
58255
  }
57220
58256
  if (allowFallbacks && !isPreview && options.prebuildFallback) {
57221
58257
  const prebuildResult = options.prebuildFallback();
57222
58258
  if (prebuildResult) {
57223
- return emitStatus("prebuild", prebuildResult.data, statusDetails({
57224
- prebuildAgeSec: prebuildResult.prebuildAgeSec,
57225
- error: { code: "circuit_open", message: "Circuit breaker is open" }
57226
- }));
58259
+ return emitStatus(
58260
+ "prebuild",
58261
+ prebuildResult.data,
58262
+ statusDetails({
58263
+ prebuildAgeSec: prebuildResult.prebuildAgeSec,
58264
+ error: {
58265
+ code: "circuit_open",
58266
+ message: "Circuit breaker is open"
58267
+ }
58268
+ })
58269
+ );
57227
58270
  }
57228
58271
  }
57229
58272
  const circuitState = circuitBreaker.getState();
57230
- emitStatus("error", null, statusDetails({
57231
- error: { code: "circuit_open", message: "Circuit breaker is open" }
57232
- }));
58273
+ emitStatus(
58274
+ "error",
58275
+ null,
58276
+ statusDetails({
58277
+ error: { code: "circuit_open", message: "Circuit breaker is open" }
58278
+ })
58279
+ );
57233
58280
  throw new CircuitOpenError(circuitState);
57234
58281
  }
57235
58282
  try {
@@ -57256,7 +58303,9 @@ function createRiverbankClient(config2) {
57256
58303
  circuitBreaker.recordSuccess();
57257
58304
  } else {
57258
58305
  try {
57259
- const response = await fetcher(options.signal ?? new AbortController().signal);
58306
+ const response = await fetcher(
58307
+ options.signal ?? new AbortController().signal
58308
+ );
57260
58309
  data = unwrapResponse(response);
57261
58310
  } catch (error) {
57262
58311
  convertToTypedError(error);
@@ -57273,28 +58322,51 @@ function createRiverbankClient(config2) {
57273
58322
  if (allowFallbacks && !isPreview && staleIfError && cacheEnabled) {
57274
58323
  const stale = cache.getStale(cacheKey);
57275
58324
  if (stale) {
57276
- const errorInfo2 = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
57277
- return emitStatus("stale", stale.value, statusDetails({
57278
- staleAgeSec: stale.staleAgeSec,
57279
- error: errorInfo2
57280
- }));
58325
+ const errorInfo2 = error instanceof RiverbankApiError ? {
58326
+ code: error.code,
58327
+ message: error.message,
58328
+ status: error.status
58329
+ } : { message: error.message };
58330
+ return emitStatus(
58331
+ "stale",
58332
+ stale.value,
58333
+ statusDetails({
58334
+ staleAgeSec: stale.staleAgeSec,
58335
+ error: errorInfo2
58336
+ })
58337
+ );
57281
58338
  }
57282
58339
  }
57283
58340
  if (allowFallbacks && !isPreview && options.prebuildFallback) {
57284
58341
  const prebuildResult = options.prebuildFallback();
57285
58342
  if (prebuildResult) {
57286
- const errorInfo2 = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
57287
- return emitStatus("prebuild", prebuildResult.data, statusDetails({
57288
- prebuildAgeSec: prebuildResult.prebuildAgeSec,
57289
- error: errorInfo2
57290
- }));
58343
+ const errorInfo2 = error instanceof RiverbankApiError ? {
58344
+ code: error.code,
58345
+ message: error.message,
58346
+ status: error.status
58347
+ } : { message: error.message };
58348
+ return emitStatus(
58349
+ "prebuild",
58350
+ prebuildResult.data,
58351
+ statusDetails({
58352
+ prebuildAgeSec: prebuildResult.prebuildAgeSec,
58353
+ error: errorInfo2
58354
+ })
58355
+ );
57291
58356
  }
57292
58357
  }
57293
- const errorInfo = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
57294
- emitStatus("error", null, statusDetails({ error: errorInfo }));
57295
- throw error;
58358
+ const errorInfo = error instanceof RiverbankApiError ? { code: error.code, message: error.message, status: error.status } : { message: error.message };
58359
+ const failure = emitStatus(
58360
+ "error",
58361
+ null,
58362
+ statusDetails({ error: errorInfo })
58363
+ );
58364
+ throw attachResilienceStatusToError(error, failure.resilience);
57296
58365
  }
57297
58366
  }
58367
+ async function resilientFetchData(cacheKey, fetcher, options) {
58368
+ return (await resilientFetch(cacheKey, fetcher, options)).data;
58369
+ }
57298
58370
  function combineAbortSignals(...signals) {
57299
58371
  const controller = new AbortController();
57300
58372
  for (const signal of signals) {
@@ -57302,32 +58374,45 @@ function createRiverbankClient(config2) {
57302
58374
  controller.abort(signal.reason);
57303
58375
  break;
57304
58376
  }
57305
- signal.addEventListener("abort", () => controller.abort(signal.reason), { once: true });
58377
+ signal.addEventListener("abort", () => controller.abort(signal.reason), {
58378
+ once: true
58379
+ });
57306
58380
  }
57307
58381
  return controller.signal;
57308
58382
  }
57309
58383
  async function resolveEntrySubrouteInternal(args) {
57310
58384
  const { siteId, entryId, kind, segment, stage, signal } = args;
57311
58385
  const cacheKey = `entry-subroute:${siteId}:${entryId}:${kind}:${segment}:${stage ?? "published"}`;
57312
- return resilientFetch(cacheKey, async (sig) => {
57313
- return await apiClient({
57314
- endpoint: "resolveEntrySubroute",
57315
- params: { siteId, entryId, kind, segment, ...stage ? { stage } : {} },
57316
- options: { signal: sig }
57317
- });
57318
- }, { signal });
58386
+ return resilientFetchData(
58387
+ cacheKey,
58388
+ async (sig) => {
58389
+ return await apiClient({
58390
+ endpoint: "resolveEntrySubroute",
58391
+ params: {
58392
+ siteId,
58393
+ entryId,
58394
+ kind,
58395
+ segment,
58396
+ ...stage ? { stage } : {}
58397
+ },
58398
+ options: { signal: sig }
58399
+ });
58400
+ },
58401
+ { signal }
58402
+ );
57319
58403
  }
57320
- return {
57321
- async getSite(params) {
57322
- const { slug, domain, id, signal, force, currentPath } = params;
57323
- if (!slug && !domain && !id) {
57324
- throw new Error(
57325
- `getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`
57326
- );
57327
- }
57328
- const cacheKey = `site:${slug || domain || id}:${currentPath ?? ""}`;
57329
- const siteId = id || slug || domain;
57330
- return resilientFetch(cacheKey, async (sig) => {
58404
+ async function getSiteWithResilienceInternal(params) {
58405
+ const { slug, domain, id, signal, force, currentPath } = params;
58406
+ if (!slug && !domain && !id) {
58407
+ throw new Error(
58408
+ `getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`
58409
+ );
58410
+ }
58411
+ const cacheKey = `site:${slug || domain || id}:${currentPath ?? ""}`;
58412
+ const siteId = id || slug || domain;
58413
+ return resilientFetch(
58414
+ cacheKey,
58415
+ async (sig) => {
57331
58416
  const apiParams = {};
57332
58417
  if (params.slug) apiParams.slug = params.slug;
57333
58418
  if (params.domain) apiParams.domain = params.domain;
@@ -57338,66 +58423,120 @@ function createRiverbankClient(config2) {
57338
58423
  endpoint: "getSite",
57339
58424
  params: apiParams,
57340
58425
  // When force=true, bypass Next.js fetch caching (revalidate) as well.
57341
- options: { signal: sig, ...force ? { cache: "no-store" } : {} }
58426
+ options: {
58427
+ signal: sig,
58428
+ ...force ? { cache: "no-store" } : {}
58429
+ }
57342
58430
  });
57343
- }, {
58431
+ },
58432
+ {
57344
58433
  signal,
57345
58434
  force,
57346
58435
  prebuildFallback: prebuildLoader && siteId ? () => prebuildLoader.loadSite(siteId) : void 0
57347
- });
57348
- },
57349
- async getPage(params) {
57350
- const { siteId, path: path24, preview = false, signal } = params;
57351
- const cacheKey = `page:${siteId}:${path24}:${preview}`;
57352
- return resilientFetch(cacheKey, async (sig) => {
57353
- return await apiClient({ endpoint: "getContentByPath", params: { siteId }, body: { path: path24, preview }, options: { signal: sig } });
57354
- }, {
58436
+ }
58437
+ );
58438
+ }
58439
+ async function getPageWithResilienceInternal(params) {
58440
+ const { siteId, path: path24, preview = false, signal } = params;
58441
+ const cacheKey = `page:${siteId}:${path24}:${preview}`;
58442
+ return resilientFetch(
58443
+ cacheKey,
58444
+ async (sig) => {
58445
+ return await apiClient({
58446
+ endpoint: "getContentByPath",
58447
+ params: { siteId },
58448
+ body: { path: path24, preview },
58449
+ options: { signal: sig }
58450
+ });
58451
+ },
58452
+ {
57355
58453
  preview,
57356
58454
  signal,
57357
58455
  // Prebuild fallback only for published pages (not preview)
57358
58456
  prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadPage(siteId, path24) : void 0
57359
- });
58457
+ }
58458
+ );
58459
+ }
58460
+ return {
58461
+ async getSite(params) {
58462
+ return (await getSiteWithResilienceInternal(params)).data;
58463
+ },
58464
+ async getSiteWithResilience(params) {
58465
+ return getSiteWithResilienceInternal(params);
58466
+ },
58467
+ async getPage(params) {
58468
+ return (await getPageWithResilienceInternal(params)).data;
58469
+ },
58470
+ async getPageWithResilience(params) {
58471
+ return getPageWithResilienceInternal(params);
57360
58472
  },
57361
58473
  async getEntries(params) {
57362
- const { siteId, contentType, limit, offset, order, preview = false, mode, entryIds, includeMeta, signal } = params;
58474
+ const {
58475
+ siteId,
58476
+ contentType,
58477
+ limit,
58478
+ offset,
58479
+ order,
58480
+ preview = false,
58481
+ mode,
58482
+ entryIds,
58483
+ includeMeta,
58484
+ signal
58485
+ } = params;
57363
58486
  const entryIdsCacheKey = mode === "manual" && entryIds?.length ? entryIds.join(",") : "";
57364
58487
  const cacheKey = `entries:${siteId}:${contentType}:${limit ?? ""}:${offset ?? ""}:${order ?? ""}:${preview}:${mode ?? ""}:${entryIdsCacheKey}:${includeMeta ?? ""}`;
57365
- return resilientFetch(cacheKey, async (sig) => {
57366
- let orderParam;
57367
- if (order === "newest") {
57368
- orderParam = "published_at.desc";
57369
- } else if (order === "oldest") {
57370
- orderParam = "published_at.asc";
57371
- } else if (order === "title") {
57372
- orderParam = "title.asc";
57373
- }
57374
- const apiParams = {
57375
- siteId,
57376
- type: contentType,
57377
- ...typeof limit === "number" && { limit: String(limit) },
57378
- ...typeof offset === "number" && { offset: String(offset) },
57379
- ...includeMeta && { meta: "true" },
57380
- ...orderParam && { order: orderParam },
57381
- ...preview && { stage: "preview" },
57382
- ...mode === "manual" && entryIds?.length && {
57383
- mode: "manual",
57384
- entryIds: JSON.stringify(entryIds)
58488
+ return resilientFetchData(
58489
+ cacheKey,
58490
+ async (sig) => {
58491
+ let orderParam;
58492
+ if (order === "newest") {
58493
+ orderParam = "published_at.desc";
58494
+ } else if (order === "oldest") {
58495
+ orderParam = "published_at.asc";
58496
+ } else if (order === "title") {
58497
+ orderParam = "title.asc";
57385
58498
  }
57386
- };
57387
- return await apiClient({ endpoint: "listPublishedEntries", params: apiParams, options: { signal: sig } });
57388
- }, {
57389
- preview,
57390
- signal,
57391
- // Prebuild fallback only for published entries (not preview, not manual mode)
57392
- prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadEntries(siteId, params) : void 0
57393
- });
58499
+ const apiParams = {
58500
+ siteId,
58501
+ type: contentType,
58502
+ ...typeof limit === "number" && { limit: String(limit) },
58503
+ ...typeof offset === "number" && { offset: String(offset) },
58504
+ ...includeMeta && { meta: "true" },
58505
+ ...orderParam && { order: orderParam },
58506
+ ...preview && { stage: "preview" },
58507
+ ...mode === "manual" && entryIds?.length && {
58508
+ mode: "manual",
58509
+ entryIds: JSON.stringify(entryIds)
58510
+ }
58511
+ };
58512
+ return await apiClient({
58513
+ endpoint: "listPublishedEntries",
58514
+ params: apiParams,
58515
+ options: { signal: sig }
58516
+ });
58517
+ },
58518
+ {
58519
+ preview,
58520
+ signal,
58521
+ // Prebuild fallback only for published entries (not preview, not manual mode)
58522
+ prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadEntries(siteId, params) : void 0
58523
+ }
58524
+ );
57394
58525
  },
57395
58526
  async getEntry(params) {
57396
58527
  const { siteId, contentType, slug, signal } = params;
57397
58528
  const cacheKey = `entry:${siteId}:${contentType}:${slug}`;
57398
- return resilientFetch(cacheKey, async (sig) => {
57399
- return await apiClient({ endpoint: "getPublishedEntryPreview", params: { siteId, type: contentType, slug }, options: { signal: sig } });
57400
- }, { signal });
58529
+ return resilientFetchData(
58530
+ cacheKey,
58531
+ async (sig) => {
58532
+ return await apiClient({
58533
+ endpoint: "getPublishedEntryPreview",
58534
+ params: { siteId, type: contentType, slug },
58535
+ options: { signal: sig }
58536
+ });
58537
+ },
58538
+ { signal }
58539
+ );
57401
58540
  },
57402
58541
  async getPublicFormById(params) {
57403
58542
  const { formId, siteId, signal } = params;
@@ -57405,10 +58544,18 @@ function createRiverbankClient(config2) {
57405
58544
  throw new Error("getPublicFormById() requires formId and siteId");
57406
58545
  }
57407
58546
  const cacheKey = `public-form:${siteId}:${formId}`;
57408
- return resilientFetch(cacheKey, async (sig) => {
57409
- const response = await apiClient({ endpoint: "getPublicFormById", params: { formId, siteId }, options: { signal: sig } });
57410
- return normalizePublicFormResult(response);
57411
- }, { signal });
58547
+ return resilientFetchData(
58548
+ cacheKey,
58549
+ async (sig) => {
58550
+ const response = await apiClient({
58551
+ endpoint: "getPublicFormById",
58552
+ params: { formId, siteId },
58553
+ options: { signal: sig }
58554
+ });
58555
+ return normalizePublicFormResult(response);
58556
+ },
58557
+ { signal }
58558
+ );
57412
58559
  },
57413
58560
  async getForms(params) {
57414
58561
  const { siteId, signal } = params;
@@ -57416,34 +58563,42 @@ function createRiverbankClient(config2) {
57416
58563
  throw new Error("getForms() requires siteId");
57417
58564
  }
57418
58565
  const cacheKey = `forms:${siteId}`;
57419
- return resilientFetch(cacheKey, async (sig) => {
57420
- const response = await apiClient({ endpoint: "listPublicForms", params: { siteId }, options: { signal: sig } });
57421
- return normalizePublicFormsResult(response);
57422
- }, {
57423
- signal,
57424
- prebuildFallback: prebuildLoader ? () => {
57425
- const result = prebuildLoader.loadForms();
57426
- if (result) {
57427
- return {
57428
- data: {
57429
- forms: result.data.map((form2) => ({
57430
- id: form2.id,
57431
- slug: form2.slug,
57432
- name: form2.name,
57433
- schema: form2.schema,
57434
- settings: form2.settings,
57435
- schemaJson: form2.schema,
57436
- settingsJson: form2.settings,
57437
- createdAt: null,
57438
- updatedAt: null
57439
- }))
57440
- },
57441
- prebuildAgeSec: result.prebuildAgeSec
57442
- };
57443
- }
57444
- return null;
57445
- } : void 0
57446
- });
58566
+ return resilientFetchData(
58567
+ cacheKey,
58568
+ async (sig) => {
58569
+ const response = await apiClient({
58570
+ endpoint: "listPublicForms",
58571
+ params: { siteId },
58572
+ options: { signal: sig }
58573
+ });
58574
+ return normalizePublicFormsResult(response);
58575
+ },
58576
+ {
58577
+ signal,
58578
+ prebuildFallback: prebuildLoader ? () => {
58579
+ const result = prebuildLoader.loadForms();
58580
+ if (result) {
58581
+ return {
58582
+ data: {
58583
+ forms: result.data.map((form2) => ({
58584
+ id: form2.id,
58585
+ slug: form2.slug,
58586
+ name: form2.name,
58587
+ schema: form2.schema,
58588
+ settings: form2.settings,
58589
+ schemaJson: form2.schema,
58590
+ settingsJson: form2.settings,
58591
+ createdAt: null,
58592
+ updatedAt: null
58593
+ }))
58594
+ },
58595
+ prebuildAgeSec: result.prebuildAgeSec
58596
+ };
58597
+ }
58598
+ return null;
58599
+ } : void 0
58600
+ }
58601
+ );
57447
58602
  },
57448
58603
  async getPublicBookingServices(params) {
57449
58604
  const { siteId, ids, signal } = params;
@@ -57451,13 +58606,21 @@ function createRiverbankClient(config2) {
57451
58606
  throw new Error("getPublicBookingServices() requires siteId");
57452
58607
  }
57453
58608
  const cacheKey = `public-booking-services:${siteId}:${ids ?? ""}`;
57454
- return resilientFetch(cacheKey, async (sig) => {
57455
- const apiParams = {
57456
- siteId,
57457
- ...ids && { ids }
57458
- };
57459
- return await apiClient({ endpoint: "getPublicBookingServices", params: apiParams, options: { signal: sig } });
57460
- }, { signal });
58609
+ return resilientFetchData(
58610
+ cacheKey,
58611
+ async (sig) => {
58612
+ const apiParams = {
58613
+ siteId,
58614
+ ...ids && { ids }
58615
+ };
58616
+ return await apiClient({
58617
+ endpoint: "getPublicBookingServices",
58618
+ params: apiParams,
58619
+ options: { signal: sig }
58620
+ });
58621
+ },
58622
+ { signal }
58623
+ );
57461
58624
  },
57462
58625
  async listPublicEvents(params) {
57463
58626
  const {
@@ -57478,22 +58641,30 @@ function createRiverbankClient(config2) {
57478
58641
  throw new Error("listPublicEvents() requires siteId");
57479
58642
  }
57480
58643
  const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
57481
- return resilientFetch(cacheKey, async (sig) => {
57482
- const apiParams = {
57483
- siteId,
57484
- ...typeof limit === "number" && { limit: String(limit) },
57485
- ...from && { from },
57486
- ...to && { to },
57487
- ...stage && { stage },
57488
- ...categoryIds && { categoryIds },
57489
- ...venueId && { venueId },
57490
- ...kind && { kind },
57491
- ...entryId && { entryId },
57492
- ...seriesId && { seriesId },
57493
- ...includeOccurrenceId && { includeOccurrenceId }
57494
- };
57495
- return await apiClient({ endpoint: "listPublicEvents", params: apiParams, options: { signal: sig } });
57496
- }, { signal });
58644
+ return resilientFetchData(
58645
+ cacheKey,
58646
+ async (sig) => {
58647
+ const apiParams = {
58648
+ siteId,
58649
+ ...typeof limit === "number" && { limit: String(limit) },
58650
+ ...from && { from },
58651
+ ...to && { to },
58652
+ ...stage && { stage },
58653
+ ...categoryIds && { categoryIds },
58654
+ ...venueId && { venueId },
58655
+ ...kind && { kind },
58656
+ ...entryId && { entryId },
58657
+ ...seriesId && { seriesId },
58658
+ ...includeOccurrenceId && { includeOccurrenceId }
58659
+ };
58660
+ return await apiClient({
58661
+ endpoint: "listPublicEvents",
58662
+ params: apiParams,
58663
+ options: { signal: sig }
58664
+ });
58665
+ },
58666
+ { signal }
58667
+ );
57497
58668
  },
57498
58669
  async getPublicEventDetails(params) {
57499
58670
  const {
@@ -57517,37 +58688,44 @@ function createRiverbankClient(config2) {
57517
58688
  throw new Error("getPublicEventDetails() requires siteId");
57518
58689
  }
57519
58690
  const cacheKey = `public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
57520
- return resilientFetch(cacheKey, async (sig) => {
57521
- const requestId = "eventDetails";
57522
- const response = await apiClient({
57523
- endpoint: "batchBlockLoaders",
57524
- params: { siteId, ...stage && { stage } },
57525
- body: {
57526
- requests: [
57527
- {
57528
- id: requestId,
57529
- endpoint: "getPublicEventDetails",
57530
- params: {
57531
- ...typeof limit === "number" && { limit: String(limit) },
57532
- ...from && { from },
57533
- ...to && { to },
57534
- ...afterStartsAt && { afterStartsAt },
57535
- ...afterId && { afterId },
57536
- ...categoryIds && { categoryIds },
57537
- ...venueId && { venueId },
57538
- ...staffMemberId && { staffMemberId },
57539
- ...kind && { kind },
57540
- ...entryId && { entryId },
57541
- ...seriesId && { seriesId },
57542
- ...includeOccurrenceId && { includeOccurrenceId }
58691
+ return resilientFetchData(
58692
+ cacheKey,
58693
+ async (sig) => {
58694
+ const requestId = "eventDetails";
58695
+ const response = await apiClient({
58696
+ endpoint: "batchBlockLoaders",
58697
+ params: { siteId, ...stage && { stage } },
58698
+ body: {
58699
+ requests: [
58700
+ {
58701
+ id: requestId,
58702
+ endpoint: "getPublicEventDetails",
58703
+ params: {
58704
+ ...typeof limit === "number" && { limit: String(limit) },
58705
+ ...from && { from },
58706
+ ...to && { to },
58707
+ ...afterStartsAt && { afterStartsAt },
58708
+ ...afterId && { afterId },
58709
+ ...categoryIds && { categoryIds },
58710
+ ...venueId && { venueId },
58711
+ ...staffMemberId && { staffMemberId },
58712
+ ...kind && { kind },
58713
+ ...entryId && { entryId },
58714
+ ...seriesId && { seriesId },
58715
+ ...includeOccurrenceId && { includeOccurrenceId }
58716
+ }
57543
58717
  }
57544
- }
57545
- ]
57546
- },
57547
- options: { signal: sig }
57548
- });
57549
- return normalizeBatchBlockLoaderResult(response, requestId);
57550
- }, { signal });
58718
+ ]
58719
+ },
58720
+ options: { signal: sig }
58721
+ });
58722
+ return normalizeBatchBlockLoaderResult(
58723
+ response,
58724
+ requestId
58725
+ );
58726
+ },
58727
+ { signal }
58728
+ );
57551
58729
  },
57552
58730
  async listPublicCourses(params) {
57553
58731
  const { siteId, limit, stage, signal } = params;
@@ -57555,14 +58733,22 @@ function createRiverbankClient(config2) {
57555
58733
  throw new Error("listPublicCourses() requires siteId");
57556
58734
  }
57557
58735
  const cacheKey = `public-courses:${siteId}:${limit ?? ""}:${stage ?? ""}`;
57558
- return resilientFetch(cacheKey, async (sig) => {
57559
- const apiParams = {
57560
- siteId,
57561
- ...typeof limit === "number" && { limit: String(limit) },
57562
- ...stage && { stage }
57563
- };
57564
- return await apiClient({ endpoint: "listPublicCourses", params: apiParams, options: { signal: sig } });
57565
- }, { signal });
58736
+ return resilientFetchData(
58737
+ cacheKey,
58738
+ async (sig) => {
58739
+ const apiParams = {
58740
+ siteId,
58741
+ ...typeof limit === "number" && { limit: String(limit) },
58742
+ ...stage && { stage }
58743
+ };
58744
+ return await apiClient({
58745
+ endpoint: "listPublicCourses",
58746
+ params: apiParams,
58747
+ options: { signal: sig }
58748
+ });
58749
+ },
58750
+ { signal }
58751
+ );
57566
58752
  },
57567
58753
  async listPublicTeamMembers(params) {
57568
58754
  const { siteId, stage, signal } = params;
@@ -57570,17 +58756,21 @@ function createRiverbankClient(config2) {
57570
58756
  throw new Error("listPublicTeamMembers() requires siteId");
57571
58757
  }
57572
58758
  const cacheKey = `public-team-members:${siteId}:${stage ?? ""}`;
57573
- return resilientFetch(cacheKey, async (sig) => {
57574
- const apiParams = {
57575
- siteId,
57576
- ...stage && { stage }
57577
- };
57578
- return await apiClient({
57579
- endpoint: "listPublicTeamMembers",
57580
- params: apiParams,
57581
- options: { signal: sig }
57582
- });
57583
- }, { signal });
58759
+ return resilientFetchData(
58760
+ cacheKey,
58761
+ async (sig) => {
58762
+ const apiParams = {
58763
+ siteId,
58764
+ ...stage && { stage }
58765
+ };
58766
+ return await apiClient({
58767
+ endpoint: "listPublicTeamMembers",
58768
+ params: apiParams,
58769
+ options: { signal: sig }
58770
+ });
58771
+ },
58772
+ { signal }
58773
+ );
57584
58774
  },
57585
58775
  async listPublicProducts(params) {
57586
58776
  const { siteId, stage, categorySelector, signal } = params;
@@ -57589,14 +58779,22 @@ function createRiverbankClient(config2) {
57589
58779
  }
57590
58780
  const selectorKey = categorySelector ? categorySelector.kind === "category" ? `category:${categorySelector.productCategoryId}` : `current-category-page:${categorySelector.productCategoryEntryId}` : "";
57591
58781
  const cacheKey = `public-products:${siteId}:${stage ?? ""}:${selectorKey}`;
57592
- return resilientFetch(cacheKey, async (sig) => {
57593
- const apiParams = {
57594
- siteId,
57595
- ...stage && { stage },
57596
- ...encodePublicProductCategorySelector(categorySelector)
57597
- };
57598
- return await apiClient({ endpoint: "listPublicProducts", params: apiParams, options: { signal: sig } });
57599
- }, { signal });
58782
+ return resilientFetchData(
58783
+ cacheKey,
58784
+ async (sig) => {
58785
+ const apiParams = {
58786
+ siteId,
58787
+ ...stage && { stage },
58788
+ ...encodePublicProductCategorySelector(categorySelector)
58789
+ };
58790
+ return await apiClient({
58791
+ endpoint: "listPublicProducts",
58792
+ params: apiParams,
58793
+ options: { signal: sig }
58794
+ });
58795
+ },
58796
+ { signal }
58797
+ );
57600
58798
  },
57601
58799
  async listPublicPasses(params) {
57602
58800
  const { siteId, categories, signal } = params;
@@ -57604,13 +58802,21 @@ function createRiverbankClient(config2) {
57604
58802
  throw new Error("listPublicPasses() requires siteId");
57605
58803
  }
57606
58804
  const cacheKey = `public-passes:${siteId}:${categories ?? ""}`;
57607
- return resilientFetch(cacheKey, async (sig) => {
57608
- const apiParams = {
57609
- siteId,
57610
- ...categories && { categories }
57611
- };
57612
- return await apiClient({ endpoint: "listPublicPasses", params: apiParams, options: { signal: sig } });
57613
- }, { signal });
58805
+ return resilientFetchData(
58806
+ cacheKey,
58807
+ async (sig) => {
58808
+ const apiParams = {
58809
+ siteId,
58810
+ ...categories && { categories }
58811
+ };
58812
+ return await apiClient({
58813
+ endpoint: "listPublicPasses",
58814
+ params: apiParams,
58815
+ options: { signal: sig }
58816
+ });
58817
+ },
58818
+ { signal }
58819
+ );
57614
58820
  },
57615
58821
  async listPublicMemberships(params) {
57616
58822
  const { siteId, categories, signal } = params;
@@ -57618,25 +58824,44 @@ function createRiverbankClient(config2) {
57618
58824
  throw new Error("listPublicMemberships() requires siteId");
57619
58825
  }
57620
58826
  const cacheKey = `public-memberships:${siteId}:${categories ?? ""}`;
57621
- return resilientFetch(cacheKey, async (sig) => {
57622
- const apiParams = {
57623
- siteId,
57624
- ...categories && { categories }
57625
- };
57626
- return await apiClient({ endpoint: "listPublicMemberships", params: apiParams, options: { signal: sig } });
57627
- }, { signal });
58827
+ return resilientFetchData(
58828
+ cacheKey,
58829
+ async (sig) => {
58830
+ const apiParams = {
58831
+ siteId,
58832
+ ...categories && { categories }
58833
+ };
58834
+ return await apiClient({
58835
+ endpoint: "listPublicMemberships",
58836
+ params: apiParams,
58837
+ options: { signal: sig }
58838
+ });
58839
+ },
58840
+ { signal }
58841
+ );
57628
58842
  },
57629
58843
  async resolveEntrySubroute(params) {
57630
58844
  const { siteId, entryId, kind, segment, stage, signal } = params;
57631
58845
  if (!siteId || !entryId || !kind || !segment) {
57632
- throw new Error("resolveEntrySubroute() requires siteId, entryId, kind, and segment");
58846
+ throw new Error(
58847
+ "resolveEntrySubroute() requires siteId, entryId, kind, and segment"
58848
+ );
57633
58849
  }
57634
- return resolveEntrySubrouteInternal({ siteId, entryId, kind, segment, stage, signal });
58850
+ return resolveEntrySubrouteInternal({
58851
+ siteId,
58852
+ entryId,
58853
+ kind,
58854
+ segment,
58855
+ stage,
58856
+ signal
58857
+ });
57635
58858
  },
57636
58859
  async resolveEventOccurrence(params) {
57637
58860
  const { siteId, entryId, segment, signal } = params;
57638
58861
  if (!siteId || !entryId || !segment) {
57639
- throw new Error("resolveEventOccurrence() requires siteId, entryId, and segment");
58862
+ throw new Error(
58863
+ "resolveEventOccurrence() requires siteId, entryId, and segment"
58864
+ );
57640
58865
  }
57641
58866
  const result = await resolveEntrySubrouteInternal({
57642
58867
  siteId,
@@ -57655,13 +58880,17 @@ function createRiverbankClient(config2) {
57655
58880
  throw new Error("checkRedirect() requires siteId and path");
57656
58881
  }
57657
58882
  const cacheKey = `redirect:${siteId}:${path24}`;
57658
- return resilientFetch(cacheKey, async (sig) => {
57659
- return await apiClient({
57660
- endpoint: "checkRedirect",
57661
- params: { site: siteId, path: path24 },
57662
- options: { signal: sig }
57663
- });
57664
- }, { signal });
58883
+ return resilientFetchData(
58884
+ cacheKey,
58885
+ async (sig) => {
58886
+ return await apiClient({
58887
+ endpoint: "checkRedirect",
58888
+ params: { site: siteId, path: path24 },
58889
+ options: { signal: sig }
58890
+ });
58891
+ },
58892
+ { signal }
58893
+ );
57665
58894
  },
57666
58895
  async getAllPublishedRoutes(params) {
57667
58896
  const { siteId, signal } = params;
@@ -57669,13 +58898,17 @@ function createRiverbankClient(config2) {
57669
58898
  throw new Error("getAllPublishedRoutes() requires siteId");
57670
58899
  }
57671
58900
  const cacheKey = `routable-content:${siteId}:published`;
57672
- return resilientFetch(cacheKey, async (sig) => {
57673
- return await apiClient({
57674
- endpoint: "getPublicRoutableContent",
57675
- params: { siteId, publishedOnly: "true" },
57676
- options: { signal: sig }
57677
- });
57678
- }, { signal });
58901
+ return resilientFetchData(
58902
+ cacheKey,
58903
+ async (sig) => {
58904
+ return await apiClient({
58905
+ endpoint: "getPublicRoutableContent",
58906
+ params: { siteId, publishedOnly: "true" },
58907
+ options: { signal: sig }
58908
+ });
58909
+ },
58910
+ { signal }
58911
+ );
57679
58912
  },
57680
58913
  async getSitemapRoutes(params) {
57681
58914
  const { siteId, page, pageSize, signal } = params;
@@ -57683,17 +58916,21 @@ function createRiverbankClient(config2) {
57683
58916
  throw new Error("getSitemapRoutes() requires siteId");
57684
58917
  }
57685
58918
  const cacheKey = `sitemap:${siteId}:${page ?? 1}:${pageSize ?? "default"}`;
57686
- return resilientFetch(cacheKey, async (sig) => {
57687
- return await apiClient({
57688
- endpoint: "getPublicSitemapRoutes",
57689
- params: {
57690
- siteId,
57691
- ...page ? { page: String(page) } : {},
57692
- ...pageSize ? { pageSize: String(pageSize) } : {}
57693
- },
57694
- options: { signal: sig }
57695
- });
57696
- }, { signal });
58919
+ return resilientFetchData(
58920
+ cacheKey,
58921
+ async (sig) => {
58922
+ return await apiClient({
58923
+ endpoint: "getPublicSitemapRoutes",
58924
+ params: {
58925
+ siteId,
58926
+ ...page ? { page: String(page) } : {},
58927
+ ...pageSize ? { pageSize: String(pageSize) } : {}
58928
+ },
58929
+ options: { signal: sig }
58930
+ });
58931
+ },
58932
+ { signal }
58933
+ );
57697
58934
  },
57698
58935
  clearCache() {
57699
58936
  cache.clear();