@riverbankcms/sdk 0.77.0 → 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 (237) hide show
  1. package/README.md +69 -0
  2. package/dist/{PreviewEditorSidebar-XSX7QKHQ.mjs → PreviewEditorSidebar-RIKFQ72L.mjs} +4916 -4847
  3. package/dist/{PreviewEditorUI-YZNEZ3QD.mjs → PreviewEditorUI-XO7TUWKK.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-LAGYMPNF.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +194 -184
  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/customBlockRegistry.d.ts +20 -1
  26. package/dist/_dts/blocks/src/index.d.ts +3 -2
  27. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  28. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  29. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  30. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  31. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  32. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
  33. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +294 -289
  34. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  35. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +21 -21
  37. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  38. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  40. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +2 -2
  41. package/dist/_dts/blocks/src/system/data/index.d.ts +5 -3
  42. package/dist/_dts/blocks/src/system/data/previewResolvedDataState.d.ts +45 -0
  43. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +2 -1
  44. package/dist/_dts/blocks/src/system/fragments/library/faqAccordion.d.ts +5 -0
  45. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +5 -0
  46. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -29
  47. package/dist/_dts/blocks/src/system/node/fragments/headingDecoration.d.ts +10 -0
  48. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +9 -0
  50. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +3 -2
  51. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  52. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  53. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +43 -8
  54. package/dist/_dts/blocks/src/system/runtime/components/multi-step/runtimeFormValidation.d.ts +28 -0
  55. package/dist/_dts/blocks/src/system/runtime/header/shared.d.ts +8 -7
  56. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCompactRow.d.ts +1 -4
  57. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +7 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +2 -8
  59. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +2 -9
  60. package/dist/_dts/blocks/src/system/runtime/nodes/shop-cart-discount-ui.d.ts +5 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout-form.d.ts +76 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout.state.d.ts +1 -4
  63. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce-store.d.ts +2 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce.shared.d.ts +1 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/shop-discount-apply.state.d.ts +52 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/shop.state.d.ts +2 -4
  67. package/dist/_dts/blocks/src/system/runtime/nodes/useDiscountApply.d.ts +21 -0
  68. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +54 -0
  69. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  70. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  71. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +4 -4
  72. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  73. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
  74. package/dist/_dts/content-editor/src/contentTypeEditorContentState.d.ts +26 -0
  75. package/dist/_dts/content-editor/src/definitions/factory.d.ts +75 -0
  76. package/dist/_dts/content-editor/src/entryWorkflows.d.ts +2 -0
  77. package/dist/_dts/content-editor/src/footerBlocksEditorState.d.ts +76 -0
  78. package/dist/_dts/content-editor/src/index.d.ts +5 -0
  79. package/dist/_dts/content-editor/src/pageWorkflowContent.d.ts +29 -0
  80. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  81. package/dist/_dts/content-model/src/index.d.ts +1 -0
  82. package/dist/_dts/content-model/src/routeTemplate.d.ts +4 -0
  83. package/dist/_dts/content-model/src/templates/editorState.d.ts +25 -0
  84. package/dist/_dts/core/src/csv-cells.d.ts +10 -0
  85. package/dist/_dts/core/src/csv-date-filter.d.ts +27 -0
  86. package/dist/_dts/core/src/csv-escape.d.ts +1 -0
  87. package/dist/_dts/core/src/csv-filename.d.ts +18 -0
  88. package/dist/_dts/core/src/csv-render.d.ts +4 -0
  89. package/dist/_dts/core/src/csv-types.d.ts +116 -0
  90. package/dist/_dts/core/src/currency-format.d.ts +4 -0
  91. package/dist/_dts/core/src/demo-capability-policy.d.ts +29 -0
  92. package/dist/_dts/core/src/demo-claim-access.d.ts +14 -0
  93. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +11 -0
  94. package/dist/_dts/core/src/demo-runtime.d.ts +47 -0
  95. package/dist/_dts/core/src/duration.d.ts +14 -0
  96. package/dist/_dts/core/src/email-format.d.ts +10 -0
  97. package/dist/_dts/core/src/field-errors.d.ts +1 -0
  98. package/dist/_dts/core/src/form-submission-preview.d.ts +24 -0
  99. package/dist/_dts/core/src/index.d.ts +20 -0
  100. package/dist/_dts/core/src/number-input.d.ts +22 -0
  101. package/dist/_dts/core/src/public-url-validation.d.ts +12 -0
  102. package/dist/_dts/core/src/slug.d.ts +39 -0
  103. package/dist/_dts/core/src/string.d.ts +19 -0
  104. package/dist/_dts/core/src/uuid.d.ts +6 -0
  105. package/dist/_dts/db/src/schemas/forms.d.ts +50 -50
  106. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +34 -0
  107. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +24 -0
  108. package/dist/_dts/media-core/src/canonicalCropReview.d.ts +66 -0
  109. package/dist/_dts/media-core/src/classifyAllPlanning.d.ts +48 -0
  110. package/dist/_dts/media-core/src/filename.d.ts +1 -0
  111. package/dist/_dts/media-core/src/index.d.ts +10 -0
  112. package/dist/_dts/media-core/src/mediaAssetUsageStatus.d.ts +47 -0
  113. package/dist/_dts/media-core/src/mediaSettingsState.d.ts +3 -0
  114. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +38 -0
  115. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +28 -0
  116. package/dist/_dts/media-core/src/videoAssetRepair.d.ts +38 -0
  117. package/dist/_dts/media-editor/src/mediaEditorDebug.d.ts +1 -0
  118. package/dist/_dts/path-utils/src/index.d.ts +8 -0
  119. package/dist/_dts/path-utils/src/redirectPaths.d.ts +26 -0
  120. package/dist/_dts/path-utils/src/safeAppPath.d.ts +26 -0
  121. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +2 -1
  122. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -0
  123. package/dist/_dts/preview-next/src/client/preview/previewDocumentFrame.d.ts +31 -0
  124. package/dist/_dts/sdk/src/client/error.d.ts +3 -0
  125. package/dist/_dts/sdk/src/client/index.d.ts +2 -2
  126. package/dist/_dts/sdk/src/client/types.d.ts +37 -19
  127. package/dist/_dts/sdk/src/contracts/theme.d.ts +1 -1
  128. package/dist/_dts/sdk/src/index.d.ts +2 -2
  129. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +16 -16
  130. package/dist/_dts/sdk/src/next/content-load-failure.d.ts +51 -0
  131. package/dist/_dts/sdk/src/next/index.d.ts +2 -1
  132. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  133. package/dist/_dts/sdk/src/portal/redirects.d.ts +1 -1
  134. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  135. package/dist/_dts/sdk/src/routing/index.d.ts +3 -2
  136. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +71 -6
  137. package/dist/_dts/sdk/src/version.d.ts +1 -1
  138. package/dist/_dts/site-commands/src/commands.d.ts +12 -12
  139. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  140. package/dist/_dts/site-commands/src/pagePaths.d.ts +6 -0
  141. package/dist/_dts/theme-core/src/accordions/siteStyleDefaults.d.ts +26 -0
  142. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -0
  143. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +1 -0
  144. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -0
  145. package/dist/_dts/theme-core/src/fonts/uploadFormat.d.ts +44 -0
  146. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/index.d.ts +3 -1
  148. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +63 -51
  149. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +6 -1
  150. package/dist/_dts/theme-core/src/navigation/types.d.ts +12 -0
  151. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  152. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +7 -0
  153. package/dist/_dts/theme-core/src/schema.d.ts +90 -48
  154. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +214 -34
  155. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -2
  156. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +214 -34
  157. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -1
  158. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +35 -7
  159. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  160. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +96 -34
  161. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +4 -2
  162. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -1
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +27 -2
  164. package/dist/_dts/theme-core/src/siteChrome.d.ts +17 -34
  165. package/dist/_dts/theme-core/src/siteChromeOverlayClearance.d.ts +22 -0
  166. package/dist/_dts/theme-core/src/siteChromePlacement.d.ts +22 -0
  167. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +32 -0
  168. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  169. package/dist/{chunk-EAWHBECW.mjs → chunk-F7RTCZYN.mjs} +229 -50
  170. package/dist/{chunk-GSQX43EZ.mjs → chunk-NIDXI46P.mjs} +22 -41
  171. package/dist/{chunk-WLQBJN2Z.mjs → chunk-OECWLDHN.mjs} +4538 -1911
  172. package/dist/{chunk-VX7B5VAC.mjs → chunk-SVMMM2NA.mjs} +8 -0
  173. package/dist/{chunk-6SMUFTXD.mjs → chunk-SXOLGNMX.mjs} +1 -1
  174. package/dist/{chunk-ANKDYZ2E.mjs → chunk-TXDES5P2.mjs} +2 -2
  175. package/dist/cli/index.mjs +2036 -594
  176. package/dist/client/{accordion-RZMQSYLR.mjs → accordion-EVDEOUPR.mjs} +2 -2
  177. package/dist/client/{bookingForm-NF4ASVNV.mjs → bookingForm-DIHBLC64.mjs} +27 -30
  178. package/dist/client/bookings.mjs +3707 -259
  179. package/dist/client/{carousel-LDX47ZIK.mjs → carousel-FEBQHIWI.mjs} +3 -4
  180. package/dist/client/{cart-RGXDS5F4.mjs → cart-7CKSXAE4.mjs} +8 -8
  181. package/dist/client/{checkout-P7WWSNNY.mjs → checkout-WKYCANLV.mjs} +8 -8
  182. package/dist/client/{chunk-JNC7CGHX.mjs → chunk-2SAVKN2M.mjs} +2 -2
  183. package/dist/client/{chunk-TQ5MSPDX.mjs → chunk-36WJCERQ.mjs} +1 -1
  184. package/dist/client/{chunk-R56FQ3RR.mjs → chunk-65F47D7Y.mjs} +280 -71
  185. package/dist/client/{chunk-L3DNHIJX.mjs → chunk-GUK2FPXQ.mjs} +23 -45
  186. package/dist/client/{chunk-PMAIXMAB.mjs → chunk-IVNCUVAV.mjs} +26 -21
  187. package/dist/client/{chunk-II7O4XN3.mjs → chunk-OFMSCGNY.mjs} +2 -2
  188. package/dist/client/chunk-PD6NBCEY.mjs +66 -0
  189. package/dist/client/{chunk-GMVTOKYG.mjs → chunk-RV6FX7UH.mjs} +510 -64
  190. package/dist/client/{chunk-E2TDNXCL.mjs → chunk-RZDWX7QW.mjs} +2 -1
  191. package/dist/client/{chunk-M3L3KYYR.mjs → chunk-UDNSI5PY.mjs} +12 -0
  192. package/dist/client/{chunk-JEZECJ3W.mjs → chunk-VPPMNXCF.mjs} +129 -3
  193. package/dist/client/{chunk-UFSWADAO.mjs → chunk-YDSEG6GZ.mjs} +5 -66
  194. package/dist/client/client.mjs +8983 -6152
  195. package/dist/client/{courseRegistration-7F65K5ZR.mjs → courseRegistration-5QF2PHKM.mjs} +14 -11
  196. package/dist/client/{eventCalendar-GLSC5KTL.mjs → eventCalendar-4ZOSETDU.mjs} +9 -9
  197. package/dist/client/{eventCombined-ZHK4WKUR.mjs → eventCombined-WQGU7JUX.mjs} +9 -9
  198. package/dist/client/{eventDetails-E3PJYBIN.mjs → eventDetails-AYWVUJ5Y.mjs} +9 -9
  199. package/dist/client/{eventListing-EMS3WC3E.mjs → eventListing-NT7C6UT5.mjs} +9 -9
  200. package/dist/client/{eventRegistration-NZOTVNPI.mjs → eventRegistration-OH24F4ZJ.mjs} +9 -9
  201. package/dist/client/{form-ETFZFATW.mjs → form-7L42SRBB.mjs} +6 -6
  202. package/dist/client/{headerSection-4LBP7ULT.mjs → headerSection-OZRZNZ52.mjs} +3 -3
  203. package/dist/client/hooks.mjs +1388 -427
  204. package/dist/client/{locationMap-5M655YSJ.mjs → locationMap-ZBXRPQ7C.mjs} +2 -2
  205. package/dist/client/{newsletterForm-QOUYW44O.mjs → newsletterForm-SNAGFF2I.mjs} +3 -3
  206. package/dist/client/{productDetail-O4DOCWQG.mjs → productDetail-I46BOFGV.mjs} +8 -8
  207. package/dist/client/{productList-A5RO5WIS.mjs → productList-BOYHTYI6.mjs} +8 -8
  208. package/dist/client/rendering/client.mjs +7090 -2645
  209. package/dist/client/rendering/islands.mjs +19 -19
  210. package/dist/client/rendering.mjs +7395 -4767
  211. package/dist/client/{shop-L4MZH4I2.mjs → shop-XTXPZTKR.mjs} +8 -8
  212. package/dist/preview-next/before-render.mjs +8 -0
  213. package/dist/preview-next/client/runtime.mjs +5 -5
  214. package/dist/preview-next/editor-chrome.css +10 -0
  215. package/dist/preview-next/middleware.mjs +8 -0
  216. package/dist/{sdk-runtime-Q6MTR4KL.mjs → sdk-runtime-ZJLKC6DR.mjs} +6 -6
  217. package/dist/server/components.mjs +4175 -2480
  218. package/dist/server/config-validation.mjs +1619 -658
  219. package/dist/server/config.mjs +1619 -658
  220. package/dist/server/data.mjs +1388 -427
  221. package/dist/server/index.mjs +488 -246
  222. package/dist/server/next.mjs +5607 -3354
  223. package/dist/server/page-converter.mjs +912 -259
  224. package/dist/server/prebuild.mjs +1 -1
  225. package/dist/server/rendering/server.mjs +4176 -2481
  226. package/dist/server/rendering.mjs +4194 -2486
  227. package/dist/server/routing.mjs +2078 -639
  228. package/dist/server/server.mjs +1886 -685
  229. package/dist/server/theme-bridge.mjs +4441 -1300
  230. package/dist/server/theme.mjs +89 -12
  231. package/dist/styles/index.css +1576 -1083
  232. package/package.json +2 -1
  233. package/dist/SdkPreviewModeRuntime-5FS5E6BI.mjs +0 -8
  234. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/DiscountCodeSection.d.ts +0 -7
  235. package/dist/_dts/preview-next/src/client/widgets/PreviewMediaField.d.ts +0 -4
  236. package/dist/client/chunk-OJPZEZU2.mjs +0 -31
  237. 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 */
@@ -4566,8 +4970,19 @@ var init_schema3 = __esm({
4566
4970
  colorToken: themeColorTokenSchema.nullable().optional()
4567
4971
  });
4568
4972
  proseLinkUnderlineStyleSchema = z.enum(["solid", "dotted", "dashed"]);
4569
- proseLinkUnderlineThicknessSchema = z.enum(["auto", "fromFont", "thin", "medium", "thick"]);
4570
- proseLinkUnderlineOffsetSchema = z.enum(["auto", "tight", "normal", "loose"]);
4973
+ proseLinkUnderlineThicknessSchema = z.enum([
4974
+ "auto",
4975
+ "fromFont",
4976
+ "thin",
4977
+ "medium",
4978
+ "thick"
4979
+ ]);
4980
+ proseLinkUnderlineOffsetSchema = z.enum([
4981
+ "auto",
4982
+ "tight",
4983
+ "normal",
4984
+ "loose"
4985
+ ]);
4571
4986
  proseLinkStyleSchema = z.object({
4572
4987
  colorToken: themeColorTokenSchema.optional(),
4573
4988
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -4578,7 +4993,14 @@ var init_schema3 = __esm({
4578
4993
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
4579
4994
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
4580
4995
  });
4581
- semanticSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
4996
+ semanticSpacingSchema = z.enum([
4997
+ "none",
4998
+ "compact",
4999
+ "cozy",
5000
+ "medium",
5001
+ "comfortable",
5002
+ "spacious"
5003
+ ]);
4582
5004
  boxRoundedSchema = z.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
4583
5005
  boxBackgroundOverlaySchema = z.object({
4584
5006
  type: z.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -4624,6 +5046,7 @@ var init_schema3 = __esm({
4624
5046
  spacing: semanticSpacingSchema.nullable().optional(),
4625
5047
  minHeight: z.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
4626
5048
  tileTreatment: z.enum(tileTreatmentValues).nullable().optional(),
5049
+ eventListTreatment: z.enum(eventListTreatmentValues).nullable().optional(),
4627
5050
  eyebrowTreatment: z.enum(eyebrowTreatmentValues).nullable().optional(),
4628
5051
  headingDecoration: headingDecorationSchema.nullable().optional(),
4629
5052
  // Author-level override consumed by later block/editor rendering phases.
@@ -4722,9 +5145,17 @@ var init_schema3 = __esm({
4722
5145
  focus: z.enum(["glow", "ring", "underline"]),
4723
5146
  label: z.enum(["inside", "above"])
4724
5147
  });
4725
- headerVariant = z.enum(["classic", "centered", "transparent", "floating", "editorial"]);
5148
+ headerVariant = z.enum(["classic", "centered", "transparent", "floating"]);
4726
5149
  headerPositioning = z.enum(["static", "sticky", "fixed"]);
4727
- headerNavStyle = z.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
5150
+ headerNavStyle = z.enum([
5151
+ "minimal",
5152
+ "underline",
5153
+ "underline-grow",
5154
+ "capsule",
5155
+ "scale",
5156
+ "frosted",
5157
+ "solid"
5158
+ ]);
4728
5159
  navFontWeight = z.enum(["regular", "medium", "semibold", "bold"]);
4729
5160
  headerMaxWidth = z.enum(["container", "full"]);
4730
5161
  headerContainerSchema = z.object({
@@ -4772,8 +5203,22 @@ var init_schema3 = __esm({
4772
5203
  textSize: z.enum(["xs", "sm", "base", "lg"]).optional()
4773
5204
  // optional = no override (browser default)
4774
5205
  }).optional();
4775
- headerCtaGapSchema = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
4776
- headerCtaTreatmentSchema = z.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
5206
+ headerCtaGapSchema = z.enum([
5207
+ "none",
5208
+ "tight",
5209
+ "compact",
5210
+ "default",
5211
+ "relaxed",
5212
+ "spacious"
5213
+ ]);
5214
+ headerCtaTreatmentSchema = z.enum([
5215
+ "default",
5216
+ "primary",
5217
+ "secondary",
5218
+ "inverted",
5219
+ "outline",
5220
+ "ghost"
5221
+ ]);
4777
5222
  navContainerSchema = z.object({
4778
5223
  type: z.enum(["none", "pill", "glass"]).default("none"),
4779
5224
  tint: z.string().nullable().optional(),
@@ -4828,7 +5273,14 @@ var init_schema3 = __esm({
4828
5273
  footerMode = z.enum(["default", "blocks", "default+blocks", "none"]);
4829
5274
  footerNavLayoutMode = z.enum(["stack", "inline", "inline-wrap"]);
4830
5275
  footerNavLayoutAlign = z.enum(["start", "center", "end", "space-between"]);
4831
- footerSpacing = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
5276
+ footerSpacing = z.enum([
5277
+ "none",
5278
+ "tight",
5279
+ "compact",
5280
+ "default",
5281
+ "relaxed",
5282
+ "spacious"
5283
+ ]);
4832
5284
  footerLogoPlacement = z.enum(["left", "right", "above", "below"]);
4833
5285
  footerLogoSize = z.enum(["sm", "md", "lg", "xl"]);
4834
5286
  footerLogoMaxHeight = z.enum(["sm", "md", "lg", "xl"]);
@@ -4893,7 +5345,12 @@ var init_schema3 = __esm({
4893
5345
  logo: footerLogoSchema.optional(),
4894
5346
  bottomBar: footerBottomBarSchema.optional()
4895
5347
  });
4896
- containerPaddingPresetSchema = z.enum(["tight", "compact", "default", "relaxed"]);
5348
+ containerPaddingPresetSchema = z.enum([
5349
+ "tight",
5350
+ "compact",
5351
+ "default",
5352
+ "relaxed"
5353
+ ]);
4897
5354
  layoutSchema = z.object({
4898
5355
  containerPadding: z.object({
4899
5356
  mobile: containerPaddingPresetSchema.optional(),
@@ -4901,8 +5358,24 @@ var init_schema3 = __esm({
4901
5358
  desktop: containerPaddingPresetSchema.optional()
4902
5359
  }).optional()
4903
5360
  }).optional();
4904
- heroTypographySizeSchema = z.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
4905
- heroTypographyLineHeightSchema = z.enum(["tight", "snug", "normal", "relaxed"]);
5361
+ heroTypographySizeSchema = z.enum([
5362
+ "sm",
5363
+ "base",
5364
+ "lg",
5365
+ "xl",
5366
+ "2xl",
5367
+ "3xl",
5368
+ "4xl",
5369
+ "5xl",
5370
+ "6xl",
5371
+ "editorial"
5372
+ ]);
5373
+ heroTypographyLineHeightSchema = z.enum([
5374
+ "tight",
5375
+ "snug",
5376
+ "normal",
5377
+ "relaxed"
5378
+ ]);
4906
5379
  heroResponsiveTypographySchema = z.object({
4907
5380
  headlineSize: heroTypographySizeSchema.optional(),
4908
5381
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -5452,6 +5925,39 @@ var init_variants = __esm({
5452
5925
  }
5453
5926
  });
5454
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
+
5455
5961
  // ../theme-core/src/site-styles/customizableSurfaces.ts
5456
5962
  var init_customizableSurfaces = __esm({
5457
5963
  "../theme-core/src/site-styles/customizableSurfaces.ts"() {
@@ -5513,10 +6019,29 @@ function resolveLegacyHeaderLookAlias(lookId) {
5513
6019
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
5514
6020
  }
5515
6021
  function getCompatibleHeaderStyleIds(layoutId) {
5516
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
5517
- const style = getHeaderStyleOrThrow(styleId);
5518
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
5519
- });
6022
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
6023
+ (styleId) => {
6024
+ const style = getHeaderStyleOrThrow(styleId);
6025
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
6026
+ }
6027
+ );
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
+ }
5520
6045
  }
5521
6046
  function solidBrandHeader(theme) {
5522
6047
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -5547,8 +6072,14 @@ function solidBrandHeader(theme) {
5547
6072
  borderRadius: "none",
5548
6073
  effects: {
5549
6074
  hover: [
5550
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
5551
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
6075
+ {
6076
+ effectId: "text-color-change",
6077
+ options: { hoverColorToken: "secondary" }
6078
+ },
6079
+ {
6080
+ effectId: "nav-underline",
6081
+ options: { style: "grow", colorToken: "secondary" }
6082
+ }
5552
6083
  ]
5553
6084
  }
5554
6085
  },
@@ -5604,10 +6135,10 @@ function cleanBaseHeader(theme) {
5604
6135
  ctaGap: "default"
5605
6136
  };
5606
6137
  }
5607
- function editorialLineHeader(theme) {
6138
+ function serifLineHeader(theme) {
5608
6139
  return {
5609
6140
  ...baseHeader(theme),
5610
- variant: "editorial",
6141
+ variant: "centered",
5611
6142
  positioning: "sticky",
5612
6143
  shrinkOnScroll: false,
5613
6144
  background: {
@@ -5661,9 +6192,7 @@ function practicalUtilityHeader(theme) {
5661
6192
  navColor: "text",
5662
6193
  navStyle: "solid",
5663
6194
  navWeight: "semibold",
5664
- shadow: {
5665
- elevation: "sm"
5666
- },
6195
+ shadow: themedHeaderShadow(theme),
5667
6196
  border: {
5668
6197
  style: "solid",
5669
6198
  width: "thin",
@@ -5732,6 +6261,7 @@ function floatingGlassHeader(theme) {
5732
6261
  return {
5733
6262
  ...transparentOverlayHeader(theme),
5734
6263
  variant: "floating",
6264
+ positioning: "sticky",
5735
6265
  navStyle: "frosted",
5736
6266
  navContainer: {
5737
6267
  type: "glass",
@@ -5781,23 +6311,13 @@ var init_headerLooks = __esm({
5781
6311
  maxRecommendedNavItems: 5,
5782
6312
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
5783
6313
  },
5784
- {
5785
- id: asHeaderLayoutId("editorial"),
5786
- label: "Editorial",
5787
- description: "A composed, magazine-like stacked header treatment.",
5788
- structure: "editorial-stack",
5789
- variant: "editorial",
5790
- defaultPositioning: "static",
5791
- shrinkOnScroll: false,
5792
- maxRecommendedNavItems: 6
5793
- },
5794
6314
  {
5795
6315
  id: asHeaderLayoutId("floating"),
5796
6316
  label: "Floating",
5797
6317
  description: "Detached header chrome that sits over the opening section.",
5798
6318
  structure: "floating-shell",
5799
6319
  variant: "floating",
5800
- defaultPositioning: "fixed",
6320
+ defaultPositioning: "sticky",
5801
6321
  shrinkOnScroll: true,
5802
6322
  maxRecommendedNavItems: 5,
5803
6323
  allowedLogoShapes: ["none", "text-only", "horizontal"]
@@ -5808,17 +6328,23 @@ var init_headerLooks = __esm({
5808
6328
  id: asHeaderStyleId("minimal"),
5809
6329
  label: "Minimal",
5810
6330
  description: "Quiet surface with simple color-change navigation.",
5811
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
6331
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5812
6332
  navInteraction: "color-change",
5813
- surface: "neutral"
6333
+ surface: "neutral",
6334
+ defaultDepth: "none",
6335
+ navTypography: "plain",
6336
+ moods: ["calm", "professional", "editorial"]
5814
6337
  },
5815
6338
  {
5816
6339
  id: asHeaderStyleId("fine-line"),
5817
6340
  label: "Fine Line",
5818
6341
  description: "Light surface with a crisp lower rule and underline hover.",
5819
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
6342
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5820
6343
  navInteraction: "underline-grow",
5821
- surface: "bordered"
6344
+ surface: "bordered",
6345
+ defaultDepth: "line",
6346
+ navTypography: "plain",
6347
+ moods: ["calm", "professional", "editorial"]
5822
6348
  },
5823
6349
  {
5824
6350
  id: asHeaderStyleId("soft-bar"),
@@ -5826,7 +6352,10 @@ var init_headerLooks = __esm({
5826
6352
  description: "Soft tinted surface with gentle pill hover states.",
5827
6353
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5828
6354
  navInteraction: "pill-background",
5829
- surface: "soft"
6355
+ surface: "soft",
6356
+ defaultDepth: "line",
6357
+ navTypography: "plain",
6358
+ moods: ["calm", "professional"]
5830
6359
  },
5831
6360
  {
5832
6361
  id: asHeaderStyleId("pill-nav"),
@@ -5834,23 +6363,32 @@ var init_headerLooks = __esm({
5834
6363
  description: "A calm pill navigation rail over a neutral header.",
5835
6364
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5836
6365
  navInteraction: "pill-background",
5837
- surface: "soft"
6366
+ surface: "soft",
6367
+ defaultDepth: "none",
6368
+ navTypography: "plain",
6369
+ moods: ["calm"]
5838
6370
  },
5839
6371
  {
5840
6372
  id: asHeaderStyleId("brand-bar"),
5841
6373
  label: "Brand Bar",
5842
6374
  description: "Solid brand surface with high-contrast navigation.",
5843
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
6375
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5844
6376
  navInteraction: "color-change",
5845
- surface: "brand-solid"
6377
+ surface: "brand-solid",
6378
+ defaultDepth: "none",
6379
+ navTypography: "brand-caps",
6380
+ moods: ["professional", "expressive", "utility"]
5846
6381
  },
5847
6382
  {
5848
6383
  id: asHeaderStyleId("brand-underline"),
5849
6384
  label: "Brand Underline",
5850
6385
  description: "Brand surface with underline-grow navigation.",
5851
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
6386
+ supportedLayoutIds: supportedLayouts(["classic"]),
5852
6387
  navInteraction: "underline-grow",
5853
- surface: "brand-solid"
6388
+ surface: "brand-solid",
6389
+ defaultDepth: "none",
6390
+ navTypography: "brand-caps",
6391
+ moods: ["expressive"]
5854
6392
  },
5855
6393
  {
5856
6394
  id: asHeaderStyleId("brand-pill"),
@@ -5858,41 +6396,54 @@ var init_headerLooks = __esm({
5858
6396
  description: "Solid brand surface with rounded active and hover states.",
5859
6397
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
5860
6398
  navInteraction: "pill-background",
5861
- surface: "brand-solid"
6399
+ surface: "brand-solid",
6400
+ defaultDepth: "none",
6401
+ navTypography: "brand-caps",
6402
+ moods: ["expressive"]
5862
6403
  },
5863
6404
  {
5864
- id: asHeaderStyleId("editorial-line"),
5865
- label: "Editorial Line",
6405
+ id: asHeaderStyleId("serif-line"),
6406
+ label: "Serif Line",
5866
6407
  description: "Typographic logo treatment with understated underline navigation.",
5867
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
6408
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5868
6409
  navInteraction: "underline-grow",
5869
- surface: "bordered"
6410
+ surface: "bordered",
6411
+ defaultDepth: "line",
6412
+ navTypography: "heading",
6413
+ moods: ["editorial", "calm"]
5870
6414
  },
5871
6415
  {
5872
6416
  id: asHeaderStyleId("flat-tabs"),
5873
6417
  label: "Flat Tabs",
5874
6418
  description: "Flat block hover and active states with a Swiss utility feel.",
5875
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
6419
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5876
6420
  navInteraction: "flat-block",
5877
- surface: "bordered"
6421
+ surface: "bordered",
6422
+ defaultDepth: "shadow",
6423
+ navTypography: "quiet-caps",
6424
+ moods: ["professional", "utility", "expressive"]
5878
6425
  },
5879
6426
  {
5880
6427
  id: asHeaderStyleId("glass"),
5881
6428
  label: "Glass",
5882
- description: "Floating translucent chrome with frosted navigation backing.",
6429
+ description: "Translucent chrome with frosted navigation backing.",
5883
6430
  supportedLayoutIds: supportedLayouts(["floating"]),
5884
6431
  navInteraction: "glass-backed",
5885
6432
  surface: "floating",
5886
- requiresFloatingLayout: true
6433
+ defaultDepth: "shadow",
6434
+ navTypography: "plain",
6435
+ moods: ["expressive", "calm"]
5887
6436
  },
5888
6437
  {
5889
6438
  id: asHeaderStyleId("minimal-surface"),
5890
- label: "Minimal Surface",
5891
- description: "Floating chrome with a restrained translucent surface.",
6439
+ label: "Clear Split",
6440
+ description: "Floating logo with transparent navigation and no shared shell.",
5892
6441
  supportedLayoutIds: supportedLayouts(["floating"]),
5893
6442
  navInteraction: "color-change",
5894
6443
  surface: "floating",
5895
- requiresFloatingLayout: true
6444
+ defaultDepth: "none",
6445
+ navTypography: "plain",
6446
+ moods: ["editorial", "calm"]
5896
6447
  },
5897
6448
  {
5898
6449
  id: asHeaderStyleId("soft-shell"),
@@ -5901,7 +6452,31 @@ var init_headerLooks = __esm({
5901
6452
  supportedLayoutIds: supportedLayouts(["floating"]),
5902
6453
  navInteraction: "pill-background",
5903
6454
  surface: "floating",
5904
- requiresFloatingLayout: true
6455
+ defaultDepth: "shadow",
6456
+ navTypography: "plain",
6457
+ moods: ["calm", "professional"]
6458
+ },
6459
+ {
6460
+ id: asHeaderStyleId("split-glass"),
6461
+ label: "Split Glass",
6462
+ description: "Logo floats independently while the navigation sits in a glass rail.",
6463
+ supportedLayoutIds: supportedLayouts(["floating"]),
6464
+ navInteraction: "glass-backed",
6465
+ surface: "floating",
6466
+ defaultDepth: "shadow",
6467
+ navTypography: "quiet-caps",
6468
+ moods: ["expressive"]
6469
+ },
6470
+ {
6471
+ id: asHeaderStyleId("split-pill"),
6472
+ label: "Split Pill",
6473
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
6474
+ supportedLayoutIds: supportedLayouts(["floating"]),
6475
+ navInteraction: "pill-background",
6476
+ surface: "floating",
6477
+ defaultDepth: "shadow",
6478
+ navTypography: "heading",
6479
+ moods: ["calm", "editorial"]
5905
6480
  }
5906
6481
  ];
5907
6482
  headerLayoutsById = new Map(
@@ -5921,7 +6496,7 @@ var init_headerLooks = __esm({
5921
6496
  "brand-bar",
5922
6497
  "brand-underline",
5923
6498
  "brand-pill",
5924
- "editorial-line",
6499
+ "serif-line",
5925
6500
  "flat-tabs"
5926
6501
  ])
5927
6502
  ],
@@ -5934,19 +6509,7 @@ var init_headerLooks = __esm({
5934
6509
  "pill-nav",
5935
6510
  "brand-bar",
5936
6511
  "brand-pill",
5937
- "editorial-line",
5938
- "flat-tabs"
5939
- ])
5940
- ],
5941
- [
5942
- asHeaderLayoutId("editorial"),
5943
- headerStyleRepairChain([
5944
- "minimal",
5945
- "fine-line",
5946
- "soft-bar",
5947
- "brand-bar",
5948
- "brand-underline",
5949
- "editorial-line",
6512
+ "serif-line",
5950
6513
  "flat-tabs"
5951
6514
  ])
5952
6515
  ],
@@ -5955,25 +6518,76 @@ var init_headerLooks = __esm({
5955
6518
  headerStyleRepairChain([
5956
6519
  "glass",
5957
6520
  "minimal-surface",
6521
+ "split-glass",
6522
+ "split-pill",
5958
6523
  "soft-shell",
5959
6524
  "brand-pill"
5960
6525
  ])
5961
6526
  ]
5962
6527
  ]);
5963
- /* @__PURE__ */ new Map([
5964
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
5965
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
5966
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
5967
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
5968
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
5969
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
5970
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
5971
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
5972
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
5973
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
5974
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
5975
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
5976
- ]);
6528
+ /* @__PURE__ */ new Map(
6529
+ [
6530
+ [
6531
+ asHeaderStyleId("brand-bar"),
6532
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
6533
+ ],
6534
+ [
6535
+ asHeaderStyleId("brand-underline"),
6536
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
6537
+ ],
6538
+ [
6539
+ asHeaderStyleId("brand-pill"),
6540
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
6541
+ ],
6542
+ [
6543
+ asHeaderStyleId("pill-nav"),
6544
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
6545
+ ],
6546
+ [
6547
+ asHeaderStyleId("flat-tabs"),
6548
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
6549
+ ],
6550
+ [
6551
+ asHeaderStyleId("serif-line"),
6552
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
6553
+ ],
6554
+ [
6555
+ asHeaderStyleId("glass"),
6556
+ headerStyleRepairChain([
6557
+ "glass",
6558
+ "soft-shell",
6559
+ "fine-line",
6560
+ "minimal-surface",
6561
+ "minimal"
6562
+ ])
6563
+ ],
6564
+ [
6565
+ asHeaderStyleId("soft-shell"),
6566
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
6567
+ ],
6568
+ [
6569
+ asHeaderStyleId("minimal-surface"),
6570
+ headerStyleRepairChain(["minimal-surface", "minimal"])
6571
+ ],
6572
+ [
6573
+ asHeaderStyleId("split-glass"),
6574
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
6575
+ ],
6576
+ [
6577
+ asHeaderStyleId("split-pill"),
6578
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
6579
+ ],
6580
+ [
6581
+ asHeaderStyleId("fine-line"),
6582
+ headerStyleRepairChain(["fine-line", "minimal"])
6583
+ ],
6584
+ [
6585
+ asHeaderStyleId("soft-bar"),
6586
+ headerStyleRepairChain(["soft-bar", "minimal"])
6587
+ ],
6588
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
6589
+ ]
6590
+ );
5977
6591
  legacyHeaderLookAliases = [
5978
6592
  {
5979
6593
  lookId: asHeaderLookId("clean-base"),
@@ -5990,10 +6604,10 @@ var init_headerLooks = __esm({
5990
6604
  }
5991
6605
  },
5992
6606
  {
5993
- lookId: asHeaderLookId("editorial-line"),
6607
+ lookId: asHeaderLookId("serif-line"),
5994
6608
  selection: {
5995
- layoutId: asHeaderLayoutId("editorial"),
5996
- styleId: asHeaderStyleId("editorial-line")
6609
+ layoutId: asHeaderLayoutId("centered"),
6610
+ styleId: asHeaderStyleId("serif-line")
5997
6611
  }
5998
6612
  },
5999
6613
  {
@@ -6032,9 +6646,7 @@ var init_headerLooks = __esm({
6032
6646
  }
6033
6647
  }
6034
6648
  ];
6035
- legacyHeaderLookAliasesById = new Map(
6036
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
6037
- );
6649
+ legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
6038
6650
  headerLookCatalog = [
6039
6651
  {
6040
6652
  id: asHeaderLookId("clean-base"),
@@ -6063,27 +6675,27 @@ var init_headerLooks = __esm({
6063
6675
  compile: solidBrandHeader
6064
6676
  },
6065
6677
  {
6066
- id: asHeaderLookId("editorial-line"),
6067
- label: "Editorial line",
6068
- visualTreatment: "light-editorial",
6678
+ id: asHeaderLookId("serif-line"),
6679
+ label: "Serif line",
6680
+ visualTreatment: "light-serif",
6069
6681
  layoutBehavior: "sticky",
6070
6682
  configuration: {
6071
- structure: "editorial-stack",
6072
- treatment: "light-editorial",
6683
+ structure: "centered-stack",
6684
+ treatment: "light-serif",
6073
6685
  behavior: "sticky"
6074
6686
  },
6075
6687
  openingRequirement: "none",
6076
6688
  maxRecommendedNavItems: 6,
6077
- compile: editorialLineHeader
6689
+ compile: serifLineHeader
6078
6690
  },
6079
6691
  {
6080
6692
  id: asHeaderLookId("centered-calm"),
6081
6693
  label: "Centered calm",
6082
- visualTreatment: "light-editorial",
6694
+ visualTreatment: "light-serif",
6083
6695
  layoutBehavior: "normal-flow",
6084
6696
  configuration: {
6085
6697
  structure: "centered-stack",
6086
- treatment: "light-editorial",
6698
+ treatment: "light-serif",
6087
6699
  behavior: "normal-flow"
6088
6700
  },
6089
6701
  openingRequirement: "none",
@@ -6559,7 +7171,7 @@ var init_typographyPresets = __esm({
6559
7171
  heroTypography: {
6560
7172
  headlineSize: "6xl",
6561
7173
  headlineLineHeight: "tight",
6562
- subheadlineSize: "editorial",
7174
+ subheadlineSize: "2xl",
6563
7175
  subheadlineLineHeight: "normal",
6564
7176
  microHeadlineSize: "6xl",
6565
7177
  microHeadlineLineHeight: "tight",
@@ -6580,21 +7192,30 @@ var init_typographyPresets = __esm({
6580
7192
 
6581
7193
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
6582
7194
  function uniqueContentFrameKinds() {
6583
- const kinds = [...new Set(
6584
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
6585
- )];
7195
+ const kinds = [
7196
+ ...new Set(
7197
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
7198
+ )
7199
+ ];
6586
7200
  const firstKind = kinds[0];
6587
7201
  if (!firstKind) {
6588
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
7202
+ throw new Error(
7203
+ "Expected generated design option catalog to expose at least one content frame kind."
7204
+ );
6589
7205
  }
6590
7206
  return [firstKind, ...kinds.slice(1)];
6591
7207
  }
6592
7208
  function defineCuratedSiteStyle(input) {
6593
7209
  const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
6594
- const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
7210
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(
7211
+ legacyHeaderLookIds,
7212
+ input.tokenRecipes
7213
+ );
6595
7214
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
6596
7215
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
6597
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
7216
+ if (!typographyPresetChoices.some(
7217
+ (choice) => choice.id === defaultTypographyPresetId
7218
+ )) {
6598
7219
  throw new Error(
6599
7220
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
6600
7221
  );
@@ -6605,9 +7226,13 @@ function defineCuratedSiteStyle(input) {
6605
7226
  description: input.description,
6606
7227
  generationBrief: input.generationBrief,
6607
7228
  selectionKeywordRules: input.selectionKeywordRules ?? [],
6608
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
7229
+ siteCreatorSelection: input.siteCreatorSelection ?? {
7230
+ kind: "explicit_only"
7231
+ },
6609
7232
  template: {
6610
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
7233
+ id: asDesignSystemTemplateId(
7234
+ `template:${input.id.replace("site-style:", "")}`
7235
+ ),
6611
7236
  name: input.name,
6612
7237
  version: 1,
6613
7238
  tokenRecipes: input.tokenRecipes,
@@ -6618,6 +7243,7 @@ function defineCuratedSiteStyle(input) {
6618
7243
  supportedTransitions: generatedDesignOptionCatalog.transitions
6619
7244
  },
6620
7245
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
7246
+ ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
6621
7247
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
6622
7248
  defaultHeaderSelection: input.defaultHeaderSelection ? {
6623
7249
  layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
@@ -6625,13 +7251,17 @@ function defineCuratedSiteStyle(input) {
6625
7251
  } : inferredHeaderCuration.defaultHeaderSelection,
6626
7252
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
6627
7253
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
6628
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
6629
- layoutId: asHeaderLayoutId(selection.layoutId),
6630
- styleId: asHeaderStyleId(selection.styleId)
6631
- })),
7254
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
7255
+ (selection) => ({
7256
+ layoutId: asHeaderLayoutId(selection.layoutId),
7257
+ styleId: asHeaderStyleId(selection.styleId)
7258
+ })
7259
+ ),
6632
7260
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
6633
7261
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
6634
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
7262
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
7263
+ asFooterLookId
7264
+ ),
6635
7265
  buttonPersonalityChoices: input.buttonPersonalityChoices,
6636
7266
  paletteVariantChoices: input.paletteVariantChoices,
6637
7267
  typographyPresetChoices,
@@ -6650,7 +7280,7 @@ function headerLayoutChoice(id, note) {
6650
7280
  function headerStyleChoice(id, note) {
6651
7281
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
6652
7282
  }
6653
- function headerLayoutRecordKey(id) {
7283
+ function unbrandHeaderLayoutId(id) {
6654
7284
  return id;
6655
7285
  }
6656
7286
  function uniqueHeaderLayoutChoices(choices) {
@@ -6672,8 +7302,72 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
6672
7302
  };
6673
7303
  return [first, ...choices.slice(1)];
6674
7304
  }
6675
- function inferHeaderCurationFromLegacyLooks(lookIds) {
6676
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
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) {
7368
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
7369
+ (selection) => Boolean(selection)
7370
+ );
6677
7371
  const defaultHeaderSelection = selections[0] ?? {
6678
7372
  layoutId: asHeaderLayoutId("classic"),
6679
7373
  styleId: asHeaderStyleId("minimal")
@@ -6683,9 +7377,13 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
6683
7377
  );
6684
7378
  const stylesByLayout = {};
6685
7379
  for (const layoutChoice of layoutChoices) {
6686
- const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
6687
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
6688
- styleChoices,
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],
6689
7387
  layoutChoice.id
6690
7388
  );
6691
7389
  }
@@ -6729,17 +7427,20 @@ function defaultTypographyPresetChoicesForRecipe(recipe) {
6729
7427
  function getCuratedSiteStyle(id) {
6730
7428
  return curatedSiteStylesById.get(id) ?? null;
6731
7429
  }
6732
- 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;
6733
7431
  var init_curatedSiteStyles = __esm({
6734
7432
  "../theme-core/src/site-styles/curatedSiteStyles.ts"() {
6735
7433
  init_personalities();
6736
7434
  init_variants();
7435
+ init_siteStyleDefaults();
6737
7436
  init_headerLooks();
6738
7437
  init_footerLooks();
6739
7438
  init_curatedChoices();
6740
7439
  init_sourceCatalogs();
6741
7440
  init_types2();
6742
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);
6743
7444
  curatedSiteStyleIdValues = [
6744
7445
  "site-style:calm-studio",
6745
7446
  "site-style:clear-professional",
@@ -6751,7 +7452,7 @@ var init_curatedSiteStyles = __esm({
6751
7452
  "site-style:personal-retreat-journal",
6752
7453
  "site-style:tactile-workshop",
6753
7454
  "site-style:modern-wellness",
6754
- "site-style:soft-earth",
7455
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
6755
7456
  "site-style:bold-launch",
6756
7457
  "site-style:south-west-twerk-school"
6757
7458
  ];
@@ -6833,7 +7534,11 @@ var init_curatedSiteStyles = __esm({
6833
7534
  motion: "subtle"
6834
7535
  },
6835
7536
  compositionBudget: quietBudget,
6836
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
7537
+ recommendedHeaderLookIds: [
7538
+ "centered-calm",
7539
+ "minimal-transparent",
7540
+ "clean-base"
7541
+ ],
6837
7542
  buttonPersonalityChoices: [
6838
7543
  buttonChoice("soft-pill"),
6839
7544
  buttonChoice("pebble"),
@@ -6862,7 +7567,11 @@ var init_curatedSiteStyles = __esm({
6862
7567
  motion: "subtle"
6863
7568
  },
6864
7569
  compositionBudget: balancedBudget,
6865
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
7570
+ recommendedHeaderLookIds: [
7571
+ "practical-utility",
7572
+ "brand-solid",
7573
+ "clean-base"
7574
+ ],
6866
7575
  buttonPersonalityChoices: [
6867
7576
  buttonChoice("confident-chip"),
6868
7577
  buttonChoice("soft-pill"),
@@ -6889,7 +7598,11 @@ var init_curatedSiteStyles = __esm({
6889
7598
  motion: "subtle"
6890
7599
  },
6891
7600
  compositionBudget: balancedBudget,
6892
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
7601
+ recommendedHeaderLookIds: [
7602
+ "serif-line",
7603
+ "minimal-transparent",
7604
+ "centered-calm"
7605
+ ],
6893
7606
  buttonPersonalityChoices: [
6894
7607
  buttonChoice("editorial-link"),
6895
7608
  buttonChoice("soft-pill"),
@@ -6917,7 +7630,11 @@ var init_curatedSiteStyles = __esm({
6917
7630
  motion: "expressive"
6918
7631
  },
6919
7632
  compositionBudget: balancedBudget,
6920
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
7633
+ recommendedHeaderLookIds: [
7634
+ "brand-solid",
7635
+ "practical-utility",
7636
+ "clean-base"
7637
+ ],
6921
7638
  buttonPersonalityChoices: [
6922
7639
  buttonChoice("pebble"),
6923
7640
  buttonChoice("brushed-wash"),
@@ -6934,7 +7651,10 @@ var init_curatedSiteStyles = __esm({
6934
7651
  name: "Quiet Luxury",
6935
7652
  description: "Minimal, confident, and refined for premium experiences and private services.",
6936
7653
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
6937
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
7654
+ siteCreatorSelection: {
7655
+ kind: "site_creator_keyword_heuristic",
7656
+ priority: 20
7657
+ },
6938
7658
  selectionKeywordRules: [
6939
7659
  { kind: "word", value: "luxury" },
6940
7660
  { kind: "word", value: "premium" },
@@ -6952,7 +7672,11 @@ var init_curatedSiteStyles = __esm({
6952
7672
  motion: "none"
6953
7673
  },
6954
7674
  compositionBudget: quietBudget,
6955
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
7675
+ recommendedHeaderLookIds: [
7676
+ "minimal-transparent",
7677
+ "serif-line",
7678
+ "clean-base"
7679
+ ],
6956
7680
  buttonPersonalityChoices: [
6957
7681
  buttonChoice("editorial-link"),
6958
7682
  buttonChoice("confident-chip"),
@@ -6988,7 +7712,11 @@ var init_curatedSiteStyles = __esm({
6988
7712
  motion: "none"
6989
7713
  },
6990
7714
  compositionBudget: quietBudget,
6991
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
7715
+ recommendedHeaderLookIds: [
7716
+ "practical-utility",
7717
+ "brand-solid",
7718
+ "clean-base"
7719
+ ],
6992
7720
  buttonPersonalityChoices: [
6993
7721
  buttonChoice("confident-chip"),
6994
7722
  buttonChoice("pebble"),
@@ -7015,7 +7743,11 @@ var init_curatedSiteStyles = __esm({
7015
7743
  motion: "subtle"
7016
7744
  },
7017
7745
  compositionBudget: balancedBudget,
7018
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
7746
+ recommendedHeaderLookIds: [
7747
+ "centered-calm",
7748
+ "minimal-transparent",
7749
+ "clean-base"
7750
+ ],
7019
7751
  buttonPersonalityChoices: [
7020
7752
  buttonChoice("soft-pill"),
7021
7753
  buttonChoice("pebble"),
@@ -7032,7 +7764,10 @@ var init_curatedSiteStyles = __esm({
7032
7764
  name: "Quiet Practice",
7033
7765
  description: "Grounded, calm, and practical for small appointment-first practices.",
7034
7766
  generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
7035
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
7767
+ siteCreatorSelection: {
7768
+ kind: "site_creator_keyword_heuristic",
7769
+ priority: 30
7770
+ },
7036
7771
  selectionKeywordRules: [
7037
7772
  { kind: "substring", value: "massage" },
7038
7773
  { kind: "word", value: "bodywork" },
@@ -7053,7 +7788,11 @@ var init_curatedSiteStyles = __esm({
7053
7788
  motion: "subtle"
7054
7789
  },
7055
7790
  compositionBudget: quietBudget,
7056
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
7791
+ recommendedHeaderLookIds: [
7792
+ "practical-utility",
7793
+ "clean-base",
7794
+ "centered-calm"
7795
+ ],
7057
7796
  buttonPersonalityChoices: [
7058
7797
  buttonChoice("pebble"),
7059
7798
  buttonChoice("soft-pill"),
@@ -7070,7 +7809,10 @@ var init_curatedSiteStyles = __esm({
7070
7809
  name: "Personal Retreat Journal",
7071
7810
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
7072
7811
  generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
7073
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
7812
+ siteCreatorSelection: {
7813
+ kind: "site_creator_keyword_heuristic",
7814
+ priority: 40
7815
+ },
7074
7816
  selectionKeywordRules: [
7075
7817
  { kind: "substring", value: "retreat" },
7076
7818
  { kind: "phrase", value: "solo practitioner" },
@@ -7090,7 +7832,11 @@ var init_curatedSiteStyles = __esm({
7090
7832
  motion: "subtle"
7091
7833
  },
7092
7834
  compositionBudget: balancedBudget,
7093
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
7835
+ recommendedHeaderLookIds: [
7836
+ "serif-line",
7837
+ "centered-calm",
7838
+ "minimal-transparent"
7839
+ ],
7094
7840
  buttonPersonalityChoices: [
7095
7841
  buttonChoice("editorial-link"),
7096
7842
  buttonChoice("soft-pill"),
@@ -7107,7 +7853,10 @@ var init_curatedSiteStyles = __esm({
7107
7853
  name: "Tactile Workshop",
7108
7854
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
7109
7855
  generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
7110
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
7856
+ siteCreatorSelection: {
7857
+ kind: "site_creator_keyword_heuristic",
7858
+ priority: 50
7859
+ },
7111
7860
  selectionKeywordRules: [
7112
7861
  { kind: "substring", value: "ceramic" },
7113
7862
  { kind: "word", value: "pottery" },
@@ -7127,8 +7876,15 @@ var init_curatedSiteStyles = __esm({
7127
7876
  motion: "subtle"
7128
7877
  },
7129
7878
  compositionBudget: balancedBudget,
7130
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
7131
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
7879
+ recommendedHeaderLookIds: [
7880
+ "brand-solid",
7881
+ "practical-utility",
7882
+ "clean-base"
7883
+ ],
7884
+ recommendedFooterLookIds: [
7885
+ "site-footer-brand-two-band",
7886
+ "footer-muted-grounding"
7887
+ ],
7132
7888
  buttonPersonalityChoices: [
7133
7889
  buttonChoice("pebble"),
7134
7890
  buttonChoice("confident-chip"),
@@ -7143,11 +7899,14 @@ var init_curatedSiteStyles = __esm({
7143
7899
  ]
7144
7900
  }),
7145
7901
  defineCuratedSiteStyle({
7146
- id: "site-style:soft-earth",
7902
+ id: SOFT_EARTH_SITE_STYLE_ID,
7147
7903
  name: "Soft Earth",
7148
7904
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
7149
- 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.",
7150
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
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.",
7906
+ siteCreatorSelection: {
7907
+ kind: "site_creator_keyword_heuristic",
7908
+ priority: 45
7909
+ },
7151
7910
  selectionKeywordRules: [
7152
7911
  { kind: "word", value: "meditation" },
7153
7912
  { kind: "word", value: "wellbeing" },
@@ -7213,18 +7972,29 @@ var init_curatedSiteStyles = __esm({
7213
7972
  paragraphSize: "default",
7214
7973
  headingSize: "editorial"
7215
7974
  }
7216
- }
7975
+ },
7976
+ accordions: softEarthAccordionSystem
7977
+ },
7978
+ defaultBlockVariants: {
7979
+ "block.faq": "question-columns"
7217
7980
  },
7218
7981
  recommendedAppearancePresetIds: [
7219
7982
  "hero-brand-scrim",
7220
- "intro-soft-earth-statement",
7221
- "feature-cards-soft-earth-offerings",
7222
- "testimonials-soft-earth-proof-band",
7223
- "faq-soft-earth-two-column",
7983
+ "intro-organic-statement",
7984
+ "feature-cards-raised-rule",
7985
+ "events-lined-panel",
7986
+ "testimonials-brand-background-quotes",
7224
7987
  "contact-form-panel"
7225
7988
  ],
7226
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
7227
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
7989
+ recommendedHeaderLookIds: [
7990
+ "centered-calm",
7991
+ "minimal-transparent",
7992
+ "serif-line"
7993
+ ],
7994
+ recommendedFooterLookIds: [
7995
+ "footer-muted-grounding",
7996
+ "site-footer-brand-two-band"
7997
+ ],
7228
7998
  buttonPersonalityChoices: [
7229
7999
  buttonChoice("earth-pill"),
7230
8000
  buttonChoice("soft-pill"),
@@ -7243,7 +8013,10 @@ var init_curatedSiteStyles = __esm({
7243
8013
  name: "Bold Launch",
7244
8014
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
7245
8015
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
7246
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
8016
+ siteCreatorSelection: {
8017
+ kind: "site_creator_keyword_heuristic",
8018
+ priority: 10
8019
+ },
7247
8020
  selectionKeywordRules: [
7248
8021
  { kind: "substring", value: "launch" },
7249
8022
  { kind: "substring", value: "campaign" },
@@ -7262,7 +8035,11 @@ var init_curatedSiteStyles = __esm({
7262
8035
  motion: "expressive"
7263
8036
  },
7264
8037
  compositionBudget: expressiveBudget,
7265
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
8038
+ recommendedHeaderLookIds: [
8039
+ "transparent-overlay",
8040
+ "floating-glass",
8041
+ "brand-solid"
8042
+ ],
7266
8043
  buttonPersonalityChoices: [
7267
8044
  buttonChoice("ink-stamp"),
7268
8045
  buttonChoice("confident-chip"),
@@ -7310,11 +8087,18 @@ var init_curatedSiteStyles = __esm({
7310
8087
  "hero-brand-scrim-fixed-frame",
7311
8088
  "body-text-editorial-intro",
7312
8089
  "schedule-details-brand-depth",
7313
- "testimonials-accent-quote-proof",
8090
+ "testimonials-accent-quote-cards",
7314
8091
  "contact-form-brand-depth-card"
7315
8092
  ],
7316
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
7317
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
8093
+ recommendedHeaderLookIds: [
8094
+ "brand-solid",
8095
+ "transparent-overlay",
8096
+ "practical-utility"
8097
+ ],
8098
+ recommendedFooterLookIds: [
8099
+ "site-footer-brand-two-band",
8100
+ "footer-muted-grounding"
8101
+ ],
7318
8102
  buttonPersonalityChoices: [
7319
8103
  buttonChoice("showtime-pill"),
7320
8104
  buttonChoice("confident-chip"),
@@ -7470,6 +8254,7 @@ var init_rawStyleFields = __esm({
7470
8254
  ];
7471
8255
  themeV2BlockSpecificRawStyleFieldNames = [
7472
8256
  "_contentCardStyles",
8257
+ "_heroLayoutStyles",
7473
8258
  "_textCardStyles"
7474
8259
  ];
7475
8260
  themeV2NormalEditorRawStyleFieldNames = [
@@ -7479,6 +8264,10 @@ var init_rawStyleFields = __esm({
7479
8264
  new Set(
7480
8265
  themeV2NormalEditorRawStyleFieldNames
7481
8266
  );
8267
+ [
8268
+ ...themeV2RuntimeStyleFieldNames,
8269
+ ...themeV2BlockSpecificRawStyleFieldNames
8270
+ ];
7482
8271
  }
7483
8272
  });
7484
8273
  function uniqueNonEmpty(values) {
@@ -7489,7 +8278,7 @@ function uniqueNonEmpty(values) {
7489
8278
  }
7490
8279
  return [firstValue, ...uniqueValues.slice(1)];
7491
8280
  }
7492
- 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;
7493
8282
  var init_designState = __esm({
7494
8283
  "../theme-core/src/site-styles/designState.ts"() {
7495
8284
  init_sourceCatalogs();
@@ -7509,6 +8298,16 @@ var init_designState = __esm({
7509
8298
  "scrim-gradient",
7510
8299
  "solid-panel"
7511
8300
  ]);
8301
+ heroCompositionIntentSchema = z.enum([
8302
+ "center",
8303
+ "bottom-left"
8304
+ ]);
8305
+ heroTypographyScaleIntentSchema = z.enum([
8306
+ "quiet",
8307
+ "editorial",
8308
+ "display",
8309
+ "poster"
8310
+ ]);
7512
8311
  sectionHeightIntentSchema = z.enum([
7513
8312
  "default",
7514
8313
  "banner",
@@ -7544,6 +8343,7 @@ var init_designState = __esm({
7544
8343
  ]);
7545
8344
  testimonialCardTreatmentSchema = z.enum(["default", "accent-quote"]);
7546
8345
  tileTreatmentSchema = z.enum(tileTreatmentValues);
8346
+ eventListTreatmentSchema = z.enum(eventListTreatmentValues);
7547
8347
  eyebrowTreatmentSchema = z.enum(eyebrowTreatmentValues);
7548
8348
  userPanelTreatments = uniqueNonEmpty(
7549
8349
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
@@ -7577,10 +8377,13 @@ var init_designState = __esm({
7577
8377
  emphasis: z.enum(userDesignOptionCatalog.emphases),
7578
8378
  sectionHeight: sectionHeightIntentSchema.optional(),
7579
8379
  heroLegibility: heroLegibilityStrategySchema.optional(),
8380
+ heroComposition: heroCompositionIntentSchema.optional(),
8381
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
7580
8382
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7581
8383
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7582
8384
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
7583
8385
  tileTreatment: tileTreatmentSchema.optional(),
8386
+ eventListTreatment: eventListTreatmentSchema.optional(),
7584
8387
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
7585
8388
  }).strict();
7586
8389
  styleAuthoritySchema = z.discriminatedUnion("kind", [
@@ -9032,6 +9835,7 @@ function styledSection(config2) {
9032
9835
  renderBackgroundImage = true,
9033
9836
  backgroundImageLoading,
9034
9837
  backgroundImageFetchPriority,
9838
+ allowOverflow = false,
9035
9839
  fullWidthPath
9036
9840
  } = config2;
9037
9841
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
@@ -9066,7 +9870,7 @@ function styledSection(config2) {
9066
9870
  // No fallback needed - transform handles all cases via defaultSpacing
9067
9871
  }
9068
9872
  },
9069
- allowOverflow: {
9873
+ allowOverflow: allowOverflow ? true : {
9070
9874
  $bind: {
9071
9875
  from: `${bindFrom}.background`,
9072
9876
  transforms: [{ id: "background.resolveAllowOverflow" }],
@@ -9630,7 +10434,10 @@ function hasFixedFrameBackgroundMotion(value) {
9630
10434
  function isTileTreatment(value) {
9631
10435
  return typeof value === "string" && tileTreatmentSet.has(value);
9632
10436
  }
9633
- 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;
9634
10441
  var init_boxStyles2 = __esm({
9635
10442
  "../blocks/src/system/transforms/registry/boxStyles.ts"() {
9636
10443
  init_core3();
@@ -9804,6 +10611,11 @@ var init_boxStyles2 = __esm({
9804
10611
  "brand-depth": "rb-tile-treatment-brand-depth"
9805
10612
  };
9806
10613
  tileTreatmentSet = new Set(tileTreatmentValues);
10614
+ eventListTreatmentClassMap = {
10615
+ plain: "",
10616
+ "lined-panel": "rb-event-list-treatment-lined-panel"
10617
+ };
10618
+ eventListTreatmentSet = new Set(eventListTreatmentValues);
9807
10619
  sectionClassNameTransform = {
9808
10620
  id: "sectionStyles.resolveClassName",
9809
10621
  kind: "string",
@@ -9871,6 +10683,17 @@ var init_boxStyles2 = __esm({
9871
10683
  `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
9872
10684
  );
9873
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
+ }
9874
10697
  if (hasFixedFrameBackgroundMotion(input)) {
9875
10698
  classes.push(fixedFrameScopeClass);
9876
10699
  }
@@ -10346,6 +11169,41 @@ var init_sectionState = __esm({
10346
11169
  }
10347
11170
  });
10348
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
+
10349
11207
  // ../blocks/src/system/node/fragments/index.ts
10350
11208
  var init_fragments = __esm({
10351
11209
  "../blocks/src/system/node/fragments/index.ts"() {
@@ -10367,6 +11225,7 @@ var init_fragments = __esm({
10367
11225
  init_sectionState();
10368
11226
  init_classNameBinding();
10369
11227
  init_eyebrow();
11228
+ init_headingDecoration();
10370
11229
  }
10371
11230
  });
10372
11231
  function defineFragment(config2) {
@@ -11183,6 +12042,7 @@ var init_testimonialsHeading = __esm({
11183
12042
  "../blocks/src/system/fragments/library/testimonialsHeading.ts"() {
11184
12043
  init_types13();
11185
12044
  init_builder();
12045
+ init_headingDecoration();
11186
12046
  init_colorStyles();
11187
12047
  testimonialsHeadingFragment = defineFragment({
11188
12048
  id: "testimonialsHeading",
@@ -11213,6 +12073,10 @@ var init_testimonialsHeading = __esm({
11213
12073
  when("content.heading"),
11214
12074
  bind("content.heading")
11215
12075
  ),
12076
+ headingDecoration({
12077
+ family: "short-center-rule",
12078
+ placement: "under-centered-heading"
12079
+ }),
11216
12080
  text(
11217
12081
  {
11218
12082
  as: "p",
@@ -12004,6 +12868,41 @@ var init_faqHeading = __esm({
12004
12868
  });
12005
12869
 
12006
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
+ }
12007
12906
  var faqAccordionFragment;
12008
12907
  var init_faqAccordion = __esm({
12009
12908
  "../blocks/src/system/fragments/library/faqAccordion.ts"() {
@@ -12042,40 +12941,7 @@ var init_faqAccordion = __esm({
12042
12941
  }
12043
12942
  }
12044
12943
  ],
12045
- layout: accordionList({
12046
- collection: "content.items",
12047
- itemName: "faqItem",
12048
- indexName: "faqIndex",
12049
- accordionProps: {
12050
- className: "accordion-root",
12051
- // CSS-first: all styling handled by theme CSS
12052
- type: "single",
12053
- collapsible: true
12054
- },
12055
- itemProps: {
12056
- className: {
12057
- $bind: {
12058
- from: "content._cardStyles",
12059
- transforms: [
12060
- {
12061
- id: "boxStyles.all",
12062
- options: {
12063
- axis: "all",
12064
- includeSpacing: false,
12065
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden rb-border"
12066
- }
12067
- }
12068
- ]
12069
- },
12070
- fallback: "rb-faq-item"
12071
- },
12072
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
12073
- // Legacy theme accordion style
12074
- iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
12075
- },
12076
- triggerFrom: "faqItem.question",
12077
- contentFrom: "faqItem.answer"
12078
- })
12944
+ layout: createFaqAccordionLayout()
12079
12945
  });
12080
12946
  }
12081
12947
  });
@@ -14666,7 +15532,7 @@ var init_event_details = __esm({
14666
15532
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
14667
15533
  function getContainerClass(layout, columns) {
14668
15534
  if (layout === "compact") {
14669
- return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
15535
+ return "event-listing-compact-container rb-flex rb-flex-col";
14670
15536
  }
14671
15537
  if (layout === "stack") {
14672
15538
  return "rb-flex rb-flex-col rb-gap-6";
@@ -15245,6 +16111,7 @@ var init_shop_commerce_shared = __esm({
15245
16111
  z.object({
15246
16112
  kind: z.literal("product"),
15247
16113
  productId: z.string().min(1),
16114
+ productCategoryId: z.string().min(1).optional().nullable(),
15248
16115
  variantId: z.string().min(1).optional().nullable(),
15249
16116
  title: z.string().min(1),
15250
16117
  variantTitle: z.string().optional().nullable(),
@@ -20234,6 +21101,14 @@ var ENDPOINT_DEFINITIONS = {
20234
21101
  responseKind: "json",
20235
21102
  errors: []
20236
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
+ },
20237
21112
  // Batch endpoint for block loader requests (reduces SSR fan-out)
20238
21113
  batchBlockLoaders: {
20239
21114
  path: "/public/sites/{siteId}/block-loaders/batch",
@@ -23145,15 +24020,15 @@ function validateStringConstraint(plan, constraint, value) {
23145
24020
  case "maxLength":
23146
24021
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
23147
24022
  case "emailFormat":
23148
- return z.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
24023
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
23149
24024
  case "phoneFormat":
23150
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
24025
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
23151
24026
  case "patternFormat": {
23152
24027
  const re = compilePattern(constraint.pattern);
23153
24028
  return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
23154
24029
  }
23155
24030
  case "urlFormat":
23156
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
24031
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
23157
24032
  case "dateFormat":
23158
24033
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
23159
24034
  case "timeFormat":
@@ -23375,9 +24250,15 @@ function compilePattern(pattern) {
23375
24250
  function isValidNumber(value) {
23376
24251
  return typeof value === "number" && Number.isFinite(value);
23377
24252
  }
23378
- function isValidUrl(value, allowRelative) {
24253
+ function isCanonicalEmailValue(value) {
24254
+ return z.email().safeParse(value).success;
24255
+ }
24256
+ function isCanonicalPhoneValue(value) {
24257
+ return TEL_RE.test(value);
24258
+ }
24259
+ function isCanonicalUrlValue(value, options = {}) {
23379
24260
  if (!value) return false;
23380
- if (allowRelative && value.startsWith("/")) return true;
24261
+ if (options.allowRelative === true && value.startsWith("/")) return true;
23381
24262
  try {
23382
24263
  const parsed = new URL(value);
23383
24264
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -23646,6 +24527,7 @@ var microLayout = styledSection({
23646
24527
  function splitLayoutWith(children) {
23647
24528
  return styledSection({
23648
24529
  children: styledContainer({
24530
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
23649
24531
  children: {
23650
24532
  type: "grid",
23651
24533
  props: {
@@ -23670,6 +24552,7 @@ function splitLayoutWith(children) {
23670
24552
  // The split variants render the image as a real grid column, so suppress
23671
24553
  // the default absolute background image layer while keeping color/overlay.
23672
24554
  renderBackgroundImage: false,
24555
+ allowOverflow: true,
23673
24556
  baseClass: ""
23674
24557
  });
23675
24558
  }
@@ -23831,6 +24714,21 @@ function introHeading(className) {
23831
24714
  bind("content.title")
23832
24715
  );
23833
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
+ }
23834
24732
  function introBody(className = "rb-prose rb-max-w-none") {
23835
24733
  return richText({ className }, bind("content.body"));
23836
24734
  }
@@ -23849,6 +24747,10 @@ function introCopyStack(options = {}) {
23849
24747
  },
23850
24748
  [
23851
24749
  introHeading(options.headingClassName ?? "rb-intro-title"),
24750
+ headingDecoration({
24751
+ family: "organic-squiggle",
24752
+ placement: "after-heading"
24753
+ }),
23852
24754
  introBody(options.bodyClassName),
23853
24755
  introCtas(options.ctaJustify)
23854
24756
  ]
@@ -23888,7 +24790,7 @@ var statementCopyLayout = styledSection({
23888
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"
23889
24791
  },
23890
24792
  [
23891
- introHeading("rb-intro-title rb-max-w-xl"),
24793
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
23892
24794
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
23893
24795
  introBody(),
23894
24796
  introCtas("start")
@@ -23909,7 +24811,7 @@ var statementMediaLayout = styledSection({
23909
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"
23910
24812
  },
23911
24813
  [
23912
- introHeading("rb-intro-title rb-max-w-xl"),
24814
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
23913
24815
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
23914
24816
  introBody(),
23915
24817
  introCtas("start")
@@ -24648,6 +25550,7 @@ init_fragments();
24648
25550
  init_styledSection();
24649
25551
  init_defineBlock();
24650
25552
  init_fragments2();
25553
+ init_faqAccordion();
24651
25554
  init_builder();
24652
25555
  init_boxStyles();
24653
25556
  var faqComposition = composeFragments([
@@ -24662,6 +25565,9 @@ function isNodeDefinitionArray(layout) {
24662
25565
  }
24663
25566
  var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
24664
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
+ });
24665
25571
  var defaultLayout = styledSection({
24666
25572
  children: styledContainer({
24667
25573
  baseClassName: "rb-relative rb-isolate",
@@ -24675,11 +25581,24 @@ var twoColumnLayout = styledSection({
24675
25581
  children: el(
24676
25582
  "div",
24677
25583
  {
24678
- 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"
24679
25585
  },
24680
25586
  [
24681
- el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
24682
- 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
24683
25602
  ]
24684
25603
  )
24685
25604
  }),
@@ -24704,7 +25623,8 @@ var faqManifest = createBlockManifest({
24704
25623
  layout: defaultLayout,
24705
25624
  variants: {
24706
25625
  default: defaultLayout,
24707
- "two-column": twoColumnLayout
25626
+ "two-column": twoColumnLayout,
25627
+ "question-columns": questionColumnsLayout
24708
25628
  },
24709
25629
  defaultVariant: "default",
24710
25630
  variantOptions: {
@@ -24715,6 +25635,10 @@ var faqManifest = createBlockManifest({
24715
25635
  "two-column": {
24716
25636
  label: "Two column",
24717
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."
24718
25642
  }
24719
25643
  },
24720
25644
  description: "Accordion of frequently asked questions and answers.",
@@ -24841,9 +25765,21 @@ var eyebrowTreatmentClassMap = {
24841
25765
  "accent-pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent rb-eyebrow-treatment-pill-bounce"
24842
25766
  };
24843
25767
  var eyebrowTreatmentSet = new Set(eyebrowTreatmentValues);
25768
+ var headingDecorationFamilySet = new Set(visibleHeadingDecorationFamilyValues);
25769
+ var headingDecorationPlacementSet = new Set(visibleHeadingDecorationPlacementValues);
25770
+ var headingDecorationColorTokenSet = new Set(headingDecorationColorTokenValues);
24844
25771
  function isEyebrowTreatment(value) {
24845
25772
  return typeof value === "string" && eyebrowTreatmentSet.has(value);
24846
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
+ }
24847
25783
  var imageGalleryCornerClassMap = {
24848
25784
  none: "",
24849
25785
  sm: "rb-rounded-sm",
@@ -24947,6 +25883,10 @@ var sectionStateToneTransform = {
24947
25883
  summary: "Map semantic section-state kind to feedback tone",
24948
25884
  run: (value) => sectionStateToneFromUnknown(value)
24949
25885
  };
25886
+ var heroTitleLengthThresholds = {
25887
+ medium: { maxCharacters: 42, maxWords: 6 },
25888
+ long: { maxCharacters: 78, maxWords: 11 }
25889
+ };
24950
25890
  function isPlainObject2(value) {
24951
25891
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
24952
25892
  }
@@ -24954,6 +25894,14 @@ function readString(obj, key) {
24954
25894
  const v = obj[key];
24955
25895
  return typeof v === "string" ? v : void 0;
24956
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
+ }
24957
25905
  function resolveHeroVariant(content) {
24958
25906
  const variant = readString(content, "variant");
24959
25907
  if (variant && variant.trim()) return variant.trim();
@@ -24962,14 +25910,14 @@ function resolveHeroVariant(content) {
24962
25910
  return null;
24963
25911
  }
24964
25912
  function resolveHeroContentAlignment(content) {
24965
- const raw = readString(content, "contentAlignment");
25913
+ const raw = readHeroLayoutString(content, "contentAlignment");
24966
25914
  if (raw === "left" || raw === "center" || raw === "right") return raw;
24967
25915
  const variant = resolveHeroVariant(content);
24968
25916
  if (variant === "split" || variant === "splitReverse") return "left";
24969
25917
  return "center";
24970
25918
  }
24971
25919
  function resolveHeroVerticalAlignment(content) {
24972
- const raw = readString(content, "verticalAlignment");
25920
+ const raw = readHeroLayoutString(content, "verticalAlignment");
24973
25921
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
24974
25922
  const sectionStyles = asPartialObject(content._sectionStyles);
24975
25923
  const minHeight = sectionStyles?.minHeight;
@@ -24979,11 +25927,29 @@ function resolveHeroVerticalAlignment(content) {
24979
25927
  return "top";
24980
25928
  }
24981
25929
  function resolveHeroContentMaxWidth(content) {
24982
- const raw = readString(content, "contentMaxWidth");
25930
+ const raw = readHeroLayoutString(content, "contentMaxWidth");
24983
25931
  if (raw === "default" || raw === "narrow" || raw === "medium" || raw === "wide")
24984
25932
  return raw;
24985
25933
  return "default";
24986
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
+ }
24987
25953
  var heroContentWrapperClassSchema = z.object({
24988
25954
  base: z.string().optional()
24989
25955
  });
@@ -24996,6 +25962,8 @@ var heroContentWrapperClassTransform = {
24996
25962
  const content = isPlainObject2(value) ? value : isPlainObject2(context.data) ? context.data : {};
24997
25963
  const alignment = resolveHeroContentAlignment(content);
24998
25964
  const maxWidth = resolveHeroContentMaxWidth(content);
25965
+ const typographyScale = resolveHeroTypographyScale(content);
25966
+ const titleLength = resolveHeroTitleLength(content);
24999
25967
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
25000
25968
  const maxWidthClass = maxWidth === "narrow" ? "rb-max-w-2xl" : maxWidth === "medium" ? "rb-max-w-3xl" : maxWidth === "wide" ? "rb-max-w-5xl" : "";
25001
25969
  const positionClass = alignment === "center" ? "rb-mx-auto" : alignment === "right" ? "rb-ml-auto" : "";
@@ -25003,7 +25971,9 @@ var heroContentWrapperClassTransform = {
25003
25971
  options?.base,
25004
25972
  textAlignClass,
25005
25973
  maxWidthClass,
25006
- positionClass
25974
+ positionClass,
25975
+ typographyScale ? `rb-hero-typography-${typographyScale}` : "",
25976
+ `rb-hero-title-${titleLength}`
25007
25977
  ]);
25008
25978
  }
25009
25979
  };
@@ -25303,6 +26273,27 @@ var uiTransforms = [
25303
26273
  const treatment = isEyebrowTreatment(value) ? value : "plain";
25304
26274
  return joinClasses3([baseClass, eyebrowTreatmentClassMap[treatment]]);
25305
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
+ }
25306
26297
  }
25307
26298
  ];
25308
26299
 
@@ -25310,6 +26301,42 @@ var uiTransforms = [
25310
26301
  init_colorConversion();
25311
26302
  init_core3();
25312
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
25313
26340
  var joinClasses4 = (parts) => parts.filter(
25314
26341
  (part) => typeof part === "string" && part.trim().length > 0
25315
26342
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -25425,32 +26452,35 @@ var headerRootClassTransform = {
25425
26452
  ...options
25426
26453
  };
25427
26454
  const content = asPartialObject(value) ?? {};
25428
- const positioning = typeof content.positioning === "string" ? content.positioning : "static";
26455
+ const positioning = parseHeaderPositioning(content.positioning);
26456
+ const placement = planSiteChromePlacement(positioning);
25429
26457
  const shrinkOnScroll = Boolean(content.shrinkOnScroll);
25430
26458
  const header = asPartialObject(value);
25431
26459
  const visuals = resolveHeaderVisualStyles(header, context.theme);
25432
26460
  const navContainerType = header?.navContainer?.type ?? "none";
25433
26461
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
25434
26462
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
25435
- const classes = [
25436
- config2.base,
25437
- backgroundClass
25438
- ];
26463
+ const classes = [config2.base, backgroundClass];
25439
26464
  if (!hasContainedNav) {
25440
26465
  if (config2.blur) classes.push(config2.blur);
25441
26466
  if (config2.blurSupport) classes.push(config2.blurSupport);
25442
26467
  }
25443
- if (positioning === "sticky") {
26468
+ if (placement.kind === "sticky") {
25444
26469
  classes.push(
25445
26470
  visuals.isTransparent ? config2.stickyTransparent : config2.sticky
25446
26471
  );
25447
- } else if (positioning === "fixed") {
26472
+ } else if (placement.kind === "fixed") {
25448
26473
  classes.push(config2.fixed);
25449
26474
  }
25450
- if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
26475
+ if (shrinkOnScroll && placement.kind !== "static") {
25451
26476
  classes.push(config2.shrink);
25452
26477
  }
25453
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
26478
+ const VALID_VARIANTS = [
26479
+ "classic",
26480
+ "centered",
26481
+ "transparent",
26482
+ "floating"
26483
+ ];
25454
26484
  const variant = header?.variant;
25455
26485
  if (variant && VALID_VARIANTS.includes(variant)) {
25456
26486
  classes.push(`header-variant-${variant}`);
@@ -25969,6 +26999,11 @@ function desktopOnlyDisplay(display) {
25969
26999
 
25970
27000
  // ../blocks/src/system/blocks/site-header.ts
25971
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
25972
27007
  var logoRow = link(
25973
27008
  {
25974
27009
  href: "/",
@@ -26062,15 +27097,21 @@ var mobileCta = ctaButton({
26062
27097
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
26063
27098
  {
26064
27099
  type: "div",
26065
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
27100
+ props: {
27101
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
27102
+ }
26066
27103
  },
26067
27104
  {
26068
27105
  type: "div",
26069
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
27106
+ props: {
27107
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
27108
+ }
26070
27109
  },
26071
27110
  {
26072
27111
  type: "div",
26073
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
27112
+ props: {
27113
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
27114
+ }
26074
27115
  }
26075
27116
  ]);
26076
27117
  var mobileToggleButton = {
@@ -26234,6 +27275,7 @@ var transparentLayout = inline(
26234
27275
  );
26235
27276
  var floatingLayout = inline(
26236
27277
  {
27278
+ [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
26237
27279
  className: bindProp("$root.theme.header.maxWidth", {
26238
27280
  transforms: pipe(
26239
27281
  tx("layout.maxWidthClass", {
@@ -26253,28 +27295,6 @@ var floatingLayout = inline(
26253
27295
  ],
26254
27296
  when("$root.theme.header.variant", { equals: "floating" })
26255
27297
  );
26256
- var editorialLayout = stack(
26257
- {
26258
- gap: "md",
26259
- align: "center",
26260
- className: bindProp("$root.theme.header.maxWidth", {
26261
- transforms: pipe(
26262
- tx("layout.maxWidthClass", {
26263
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
26264
- })
26265
- ),
26266
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
26267
- })
26268
- },
26269
- [
26270
- centeredLogoRow,
26271
- createNavRow(
26272
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
26273
- "center"
26274
- )
26275
- ],
26276
- when("$root.theme.header.variant", { equals: "editorial" })
26277
- );
26278
27298
  var headerLayout = headerSection(
26279
27299
  {
26280
27300
  background: bindProp("$root.theme.header", {
@@ -26288,10 +27308,7 @@ var headerLayout = headerSection(
26288
27308
  }),
26289
27309
  style: bindProp("$root.theme.header", {
26290
27310
  transforms: pipe(tx("layout.headerRootStyle")),
26291
- fallback: mergeStyles(
26292
- textColorStyle("text"),
26293
- borderColorStyle("border")
26294
- )
27311
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
26295
27312
  })
26296
27313
  },
26297
27314
  [
@@ -26300,7 +27317,6 @@ var headerLayout = headerSection(
26300
27317
  centeredLayout,
26301
27318
  transparentLayout,
26302
27319
  floatingLayout,
26303
- editorialLayout,
26304
27320
  mobileOverlay
26305
27321
  ],
26306
27322
  props({
@@ -27242,6 +28258,10 @@ var sectionHeading = stack(
27242
28258
  when("content.title"),
27243
28259
  bind("content.title")
27244
28260
  ),
28261
+ headingDecoration({
28262
+ family: "short-center-rule",
28263
+ placement: "under-centered-heading"
28264
+ }),
27245
28265
  richText(
27246
28266
  {
27247
28267
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -32519,6 +33539,10 @@ var scheduleTileTreatments = [
32519
33539
  "quiet",
32520
33540
  "brand-depth"
32521
33541
  ];
33542
+ var eventListTreatments = [
33543
+ "plain",
33544
+ "lined-panel"
33545
+ ];
32522
33546
  function scheduleDetailsCapable() {
32523
33547
  return declareBlockDesignCapability({
32524
33548
  sectionSurfaces: "supported",
@@ -32527,6 +33551,14 @@ function scheduleDetailsCapable() {
32527
33551
  tileTreatments: scheduleTileTreatments
32528
33552
  });
32529
33553
  }
33554
+ function eventListCapable() {
33555
+ return declareBlockDesignCapability({
33556
+ sectionSurfaces: "supported",
33557
+ contentFrames: ["plain"],
33558
+ itemSurfaces: "unsupported",
33559
+ eventListTreatments
33560
+ });
33561
+ }
32530
33562
  function defaultBoundaryBias(visualWeight) {
32531
33563
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
32532
33564
  }
@@ -32746,7 +33778,8 @@ var systemBlockDefinitionsRaw = [
32746
33778
  flow: bodyFlow,
32747
33779
  layoutProfiles: [
32748
33780
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
32749
- 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" })
32750
33783
  ]
32751
33784
  })),
32752
33785
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -32840,11 +33873,11 @@ var systemBlockDefinitionsRaw = [
32840
33873
  flow: offeringsFlow,
32841
33874
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "centered", weight: "featured" })]
32842
33875
  })),
32843
- withDesignCapability("block.event-listing", eventListingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
33876
+ withDesignCapability("block.event-listing", eventListingBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
32844
33877
  flow: offeringsFlow,
32845
33878
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
32846
33879
  })),
32847
- withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
33880
+ withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
32848
33881
  flow: offeringsFlow,
32849
33882
  layoutProfiles: [
32850
33883
  layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
@@ -33477,6 +34510,9 @@ var builtinTransformDefinitions = [
33477
34510
  ];
33478
34511
  createTransformRegistry(builtinTransformDefinitions);
33479
34512
 
34513
+ // ../theme-core/src/accordions/defaults.ts
34514
+ init_curatedSiteStyles();
34515
+
33480
34516
  // ../theme-core/src/runtime/buildThemeRuntime.ts
33481
34517
  init_expandPalette();
33482
34518
 
@@ -33500,6 +34536,8 @@ init_resolver();
33500
34536
 
33501
34537
  // ../theme-core/src/navigation/generateNavLinkCSS.ts
33502
34538
  init_types10();
34539
+ init_expandPalette();
34540
+ init_colorConversion();
33503
34541
  init_generateEffectsCSS();
33504
34542
 
33505
34543
  // ../theme-core/src/header/generateHeaderCss.ts
@@ -33762,6 +34800,14 @@ ${root} {
33762
34800
  `;
33763
34801
  }
33764
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
+
33765
34811
  // ../theme-core/src/blocks/vars/customer-portal.ts
33766
34812
  function generateCustomerPortalVars({
33767
34813
  themeId
@@ -33775,6 +34821,11 @@ ${root} {
33775
34821
  --cp-muted: rgb(var(--tb-mutedText));
33776
34822
  --cp-border: rgb(var(--tb-border));
33777
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));
33778
34829
 
33779
34830
  /* Shared tab bar (underline style) */
33780
34831
  --rb-tab-border-width: 1px;
@@ -33825,7 +34876,7 @@ ${root} {
33825
34876
  --rb-modal-bg: var(--cp-card-bg);
33826
34877
  --rb-modal-border: var(--cp-card-border);
33827
34878
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
33828
- --rb-modal-radius: var(--radius-card);
34879
+ --rb-modal-radius: var(--cp-card-radius);
33829
34880
  --rb-modal-max-width: 560px;
33830
34881
 
33831
34882
  /* Header */
@@ -36064,8 +37115,6 @@ function createBearerAPIClient(token, baseUrl) {
36064
37115
  };
36065
37116
  return createCMSClient(authHeaders, baseUrl);
36066
37117
  }
36067
-
36068
- // ../api/src/bookingVerticals.ts
36069
37118
  var VERTICAL_IDS = [
36070
37119
  "yoga_wellness",
36071
37120
  "fitness_pt",
@@ -36140,10 +37189,136 @@ var VERTICAL_BOOKING_PRESETS = [
36140
37189
  preset("community_wellbeing.retreats", "community_wellbeing", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats."),
36141
37190
  preset("venue_event_space.resource_hire", "venue_event_space", "appointment", "Hire slot", "Hire slots", "Future room, venue, and resource hire bookings.", "future")
36142
37191
  ];
36143
- new Set(VERTICAL_IDS);
36144
- new Set(
37192
+ var VERTICAL_ID_SET = new Set(VERTICAL_IDS);
37193
+ var VERTICAL_PRESET_ID_SET = new Set(
36145
37194
  VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id)
36146
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
+ };
36147
37322
  function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
36148
37323
  return {
36149
37324
  id,
@@ -36587,6 +37762,39 @@ function isNavigationMenuValidationItem(value) {
36587
37762
  if (!isRecord3(value)) return false;
36588
37763
  return typeof value.label === "string";
36589
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);
36590
37798
  var Rfc6902PatchOp = z.discriminatedUnion("op", [
36591
37799
  // Standard RFC-6902 operations
36592
37800
  z.object({
@@ -45780,6 +46988,17 @@ function slugPart(value) {
45780
46988
  return value.trim().toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "");
45781
46989
  }
45782
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
+
45783
47002
  // ../site-commands/src/commands.ts
45784
47003
  var commandRefSchema = z.string().regex(commandRefPattern).transform((value) => value);
45785
47004
  var siteCommandSiteRefSchema = z.string().regex(siteCommandSiteRefPattern).transform((value) => value);
@@ -46823,10 +48042,6 @@ function isValidIanaTimezone(value) {
46823
48042
  return false;
46824
48043
  }
46825
48044
  }
46826
- function normalizedPagePath(slug) {
46827
- const commandSlug = slug === "" ? "home" : slug.replace(/^\/+/u, "");
46828
- return commandSlug === "home" ? "/" : `/${commandSlug}`;
46829
- }
46830
48045
 
46831
48046
  // ../site-commands/src/domain.ts
46832
48047
  var unsafeAsSiteCommandIdempotencyKey = (value) => value;
@@ -56301,7 +57516,7 @@ var SimpleCache = class {
56301
57516
  };
56302
57517
 
56303
57518
  // src/version.ts
56304
- var SDK_VERSION = "0.77.0";
57519
+ var SDK_VERSION = "0.78.0";
56305
57520
 
56306
57521
  // src/client/error.ts
56307
57522
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -56446,6 +57661,16 @@ var RiverbankApiError = class _RiverbankApiError extends Error {
56446
57661
  return lines.join("\n");
56447
57662
  }
56448
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
+ }
56449
57674
 
56450
57675
  // src/client/resilience.ts
56451
57676
  var DEFAULT_RETRY_CONFIG2 = {
@@ -56704,7 +57929,9 @@ var CircuitOpenError = class extends Error {
56704
57929
  var prebuildModule = null;
56705
57930
  function tryRequire(modulePath) {
56706
57931
  try {
56707
- const req = Function('return typeof require === "function" ? require : null')();
57932
+ const req = Function(
57933
+ 'return typeof require === "function" ? require : null'
57934
+ )();
56708
57935
  return req ? req(modulePath) : null;
56709
57936
  } catch {
56710
57937
  return null;
@@ -56723,7 +57950,9 @@ function getPrebuildModule() {
56723
57950
  return null;
56724
57951
  }
56725
57952
  try {
56726
- prebuildModule = tryRequire("../prebuild/loader");
57953
+ prebuildModule = tryRequire(
57954
+ "../prebuild/loader"
57955
+ );
56727
57956
  return prebuildModule;
56728
57957
  } catch {
56729
57958
  return null;
@@ -56783,7 +58012,9 @@ function normalizePublicFormResult(result) {
56783
58012
  }
56784
58013
  function normalizePublicFormsResponse(response) {
56785
58014
  return {
56786
- forms: response.forms.map((form2) => normalizePublicFormResponse({ form: form2 }).form)
58015
+ forms: response.forms.map(
58016
+ (form2) => normalizePublicFormResponse({ form: form2 }).form
58017
+ )
56787
58018
  };
56788
58019
  }
56789
58020
  function normalizePublicFormsResult(result) {
@@ -56982,7 +58213,10 @@ function createRiverbankClient(config2) {
56982
58213
  isDegraded = nowDegraded;
56983
58214
  config2.resilience?.onDegradedMode?.(nowDegraded, status);
56984
58215
  }
56985
- return data;
58216
+ return {
58217
+ data,
58218
+ resilience: status
58219
+ };
56986
58220
  }
56987
58221
  async function resilientFetch(cacheKey, fetcher, options) {
56988
58222
  const requestId = generateRequestId2();
@@ -57006,25 +58240,43 @@ function createRiverbankClient(config2) {
57006
58240
  if (allowFallbacks && !isPreview && staleIfError) {
57007
58241
  const stale = cache.getStale(cacheKey);
57008
58242
  if (stale) {
57009
- return emitStatus("stale", stale.value, statusDetails({
57010
- staleAgeSec: stale.staleAgeSec,
57011
- error: { code: "circuit_open", message: "Circuit breaker is open" }
57012
- }));
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
+ );
57013
58254
  }
57014
58255
  }
57015
58256
  if (allowFallbacks && !isPreview && options.prebuildFallback) {
57016
58257
  const prebuildResult = options.prebuildFallback();
57017
58258
  if (prebuildResult) {
57018
- return emitStatus("prebuild", prebuildResult.data, statusDetails({
57019
- prebuildAgeSec: prebuildResult.prebuildAgeSec,
57020
- error: { code: "circuit_open", message: "Circuit breaker is open" }
57021
- }));
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
+ );
57022
58270
  }
57023
58271
  }
57024
58272
  const circuitState = circuitBreaker.getState();
57025
- emitStatus("error", null, statusDetails({
57026
- error: { code: "circuit_open", message: "Circuit breaker is open" }
57027
- }));
58273
+ emitStatus(
58274
+ "error",
58275
+ null,
58276
+ statusDetails({
58277
+ error: { code: "circuit_open", message: "Circuit breaker is open" }
58278
+ })
58279
+ );
57028
58280
  throw new CircuitOpenError(circuitState);
57029
58281
  }
57030
58282
  try {
@@ -57051,7 +58303,9 @@ function createRiverbankClient(config2) {
57051
58303
  circuitBreaker.recordSuccess();
57052
58304
  } else {
57053
58305
  try {
57054
- const response = await fetcher(options.signal ?? new AbortController().signal);
58306
+ const response = await fetcher(
58307
+ options.signal ?? new AbortController().signal
58308
+ );
57055
58309
  data = unwrapResponse(response);
57056
58310
  } catch (error) {
57057
58311
  convertToTypedError(error);
@@ -57068,28 +58322,51 @@ function createRiverbankClient(config2) {
57068
58322
  if (allowFallbacks && !isPreview && staleIfError && cacheEnabled) {
57069
58323
  const stale = cache.getStale(cacheKey);
57070
58324
  if (stale) {
57071
- const errorInfo2 = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
57072
- return emitStatus("stale", stale.value, statusDetails({
57073
- staleAgeSec: stale.staleAgeSec,
57074
- error: errorInfo2
57075
- }));
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
+ );
57076
58338
  }
57077
58339
  }
57078
58340
  if (allowFallbacks && !isPreview && options.prebuildFallback) {
57079
58341
  const prebuildResult = options.prebuildFallback();
57080
58342
  if (prebuildResult) {
57081
- const errorInfo2 = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
57082
- return emitStatus("prebuild", prebuildResult.data, statusDetails({
57083
- prebuildAgeSec: prebuildResult.prebuildAgeSec,
57084
- error: errorInfo2
57085
- }));
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
+ );
57086
58356
  }
57087
58357
  }
57088
- const errorInfo = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
57089
- emitStatus("error", null, statusDetails({ error: errorInfo }));
57090
- 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);
57091
58365
  }
57092
58366
  }
58367
+ async function resilientFetchData(cacheKey, fetcher, options) {
58368
+ return (await resilientFetch(cacheKey, fetcher, options)).data;
58369
+ }
57093
58370
  function combineAbortSignals(...signals) {
57094
58371
  const controller = new AbortController();
57095
58372
  for (const signal of signals) {
@@ -57097,32 +58374,45 @@ function createRiverbankClient(config2) {
57097
58374
  controller.abort(signal.reason);
57098
58375
  break;
57099
58376
  }
57100
- signal.addEventListener("abort", () => controller.abort(signal.reason), { once: true });
58377
+ signal.addEventListener("abort", () => controller.abort(signal.reason), {
58378
+ once: true
58379
+ });
57101
58380
  }
57102
58381
  return controller.signal;
57103
58382
  }
57104
58383
  async function resolveEntrySubrouteInternal(args) {
57105
58384
  const { siteId, entryId, kind, segment, stage, signal } = args;
57106
58385
  const cacheKey = `entry-subroute:${siteId}:${entryId}:${kind}:${segment}:${stage ?? "published"}`;
57107
- return resilientFetch(cacheKey, async (sig) => {
57108
- return await apiClient({
57109
- endpoint: "resolveEntrySubroute",
57110
- params: { siteId, entryId, kind, segment, ...stage ? { stage } : {} },
57111
- options: { signal: sig }
57112
- });
57113
- }, { 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
+ );
57114
58403
  }
57115
- return {
57116
- async getSite(params) {
57117
- const { slug, domain, id, signal, force, currentPath } = params;
57118
- if (!slug && !domain && !id) {
57119
- throw new Error(
57120
- `getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`
57121
- );
57122
- }
57123
- const cacheKey = `site:${slug || domain || id}:${currentPath ?? ""}`;
57124
- const siteId = id || slug || domain;
57125
- 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) => {
57126
58416
  const apiParams = {};
57127
58417
  if (params.slug) apiParams.slug = params.slug;
57128
58418
  if (params.domain) apiParams.domain = params.domain;
@@ -57133,66 +58423,120 @@ function createRiverbankClient(config2) {
57133
58423
  endpoint: "getSite",
57134
58424
  params: apiParams,
57135
58425
  // When force=true, bypass Next.js fetch caching (revalidate) as well.
57136
- options: { signal: sig, ...force ? { cache: "no-store" } : {} }
58426
+ options: {
58427
+ signal: sig,
58428
+ ...force ? { cache: "no-store" } : {}
58429
+ }
57137
58430
  });
57138
- }, {
58431
+ },
58432
+ {
57139
58433
  signal,
57140
58434
  force,
57141
58435
  prebuildFallback: prebuildLoader && siteId ? () => prebuildLoader.loadSite(siteId) : void 0
57142
- });
57143
- },
57144
- async getPage(params) {
57145
- const { siteId, path: path24, preview = false, signal } = params;
57146
- const cacheKey = `page:${siteId}:${path24}:${preview}`;
57147
- return resilientFetch(cacheKey, async (sig) => {
57148
- return await apiClient({ endpoint: "getContentByPath", params: { siteId }, body: { path: path24, preview }, options: { signal: sig } });
57149
- }, {
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
+ {
57150
58453
  preview,
57151
58454
  signal,
57152
58455
  // Prebuild fallback only for published pages (not preview)
57153
58456
  prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadPage(siteId, path24) : void 0
57154
- });
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);
57155
58472
  },
57156
58473
  async getEntries(params) {
57157
- 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;
57158
58486
  const entryIdsCacheKey = mode === "manual" && entryIds?.length ? entryIds.join(",") : "";
57159
58487
  const cacheKey = `entries:${siteId}:${contentType}:${limit ?? ""}:${offset ?? ""}:${order ?? ""}:${preview}:${mode ?? ""}:${entryIdsCacheKey}:${includeMeta ?? ""}`;
57160
- return resilientFetch(cacheKey, async (sig) => {
57161
- let orderParam;
57162
- if (order === "newest") {
57163
- orderParam = "published_at.desc";
57164
- } else if (order === "oldest") {
57165
- orderParam = "published_at.asc";
57166
- } else if (order === "title") {
57167
- orderParam = "title.asc";
57168
- }
57169
- const apiParams = {
57170
- siteId,
57171
- type: contentType,
57172
- ...typeof limit === "number" && { limit: String(limit) },
57173
- ...typeof offset === "number" && { offset: String(offset) },
57174
- ...includeMeta && { meta: "true" },
57175
- ...orderParam && { order: orderParam },
57176
- ...preview && { stage: "preview" },
57177
- ...mode === "manual" && entryIds?.length && {
57178
- mode: "manual",
57179
- 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";
57180
58498
  }
57181
- };
57182
- return await apiClient({ endpoint: "listPublishedEntries", params: apiParams, options: { signal: sig } });
57183
- }, {
57184
- preview,
57185
- signal,
57186
- // Prebuild fallback only for published entries (not preview, not manual mode)
57187
- prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadEntries(siteId, params) : void 0
57188
- });
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
+ );
57189
58525
  },
57190
58526
  async getEntry(params) {
57191
58527
  const { siteId, contentType, slug, signal } = params;
57192
58528
  const cacheKey = `entry:${siteId}:${contentType}:${slug}`;
57193
- return resilientFetch(cacheKey, async (sig) => {
57194
- return await apiClient({ endpoint: "getPublishedEntryPreview", params: { siteId, type: contentType, slug }, options: { signal: sig } });
57195
- }, { 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
+ );
57196
58540
  },
57197
58541
  async getPublicFormById(params) {
57198
58542
  const { formId, siteId, signal } = params;
@@ -57200,10 +58544,18 @@ function createRiverbankClient(config2) {
57200
58544
  throw new Error("getPublicFormById() requires formId and siteId");
57201
58545
  }
57202
58546
  const cacheKey = `public-form:${siteId}:${formId}`;
57203
- return resilientFetch(cacheKey, async (sig) => {
57204
- const response = await apiClient({ endpoint: "getPublicFormById", params: { formId, siteId }, options: { signal: sig } });
57205
- return normalizePublicFormResult(response);
57206
- }, { 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
+ );
57207
58559
  },
57208
58560
  async getForms(params) {
57209
58561
  const { siteId, signal } = params;
@@ -57211,34 +58563,42 @@ function createRiverbankClient(config2) {
57211
58563
  throw new Error("getForms() requires siteId");
57212
58564
  }
57213
58565
  const cacheKey = `forms:${siteId}`;
57214
- return resilientFetch(cacheKey, async (sig) => {
57215
- const response = await apiClient({ endpoint: "listPublicForms", params: { siteId }, options: { signal: sig } });
57216
- return normalizePublicFormsResult(response);
57217
- }, {
57218
- signal,
57219
- prebuildFallback: prebuildLoader ? () => {
57220
- const result = prebuildLoader.loadForms();
57221
- if (result) {
57222
- return {
57223
- data: {
57224
- forms: result.data.map((form2) => ({
57225
- id: form2.id,
57226
- slug: form2.slug,
57227
- name: form2.name,
57228
- schema: form2.schema,
57229
- settings: form2.settings,
57230
- schemaJson: form2.schema,
57231
- settingsJson: form2.settings,
57232
- createdAt: null,
57233
- updatedAt: null
57234
- }))
57235
- },
57236
- prebuildAgeSec: result.prebuildAgeSec
57237
- };
57238
- }
57239
- return null;
57240
- } : void 0
57241
- });
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
+ );
57242
58602
  },
57243
58603
  async getPublicBookingServices(params) {
57244
58604
  const { siteId, ids, signal } = params;
@@ -57246,13 +58606,21 @@ function createRiverbankClient(config2) {
57246
58606
  throw new Error("getPublicBookingServices() requires siteId");
57247
58607
  }
57248
58608
  const cacheKey = `public-booking-services:${siteId}:${ids ?? ""}`;
57249
- return resilientFetch(cacheKey, async (sig) => {
57250
- const apiParams = {
57251
- siteId,
57252
- ...ids && { ids }
57253
- };
57254
- return await apiClient({ endpoint: "getPublicBookingServices", params: apiParams, options: { signal: sig } });
57255
- }, { 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
+ );
57256
58624
  },
57257
58625
  async listPublicEvents(params) {
57258
58626
  const {
@@ -57273,22 +58641,30 @@ function createRiverbankClient(config2) {
57273
58641
  throw new Error("listPublicEvents() requires siteId");
57274
58642
  }
57275
58643
  const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
57276
- return resilientFetch(cacheKey, async (sig) => {
57277
- const apiParams = {
57278
- siteId,
57279
- ...typeof limit === "number" && { limit: String(limit) },
57280
- ...from && { from },
57281
- ...to && { to },
57282
- ...stage && { stage },
57283
- ...categoryIds && { categoryIds },
57284
- ...venueId && { venueId },
57285
- ...kind && { kind },
57286
- ...entryId && { entryId },
57287
- ...seriesId && { seriesId },
57288
- ...includeOccurrenceId && { includeOccurrenceId }
57289
- };
57290
- return await apiClient({ endpoint: "listPublicEvents", params: apiParams, options: { signal: sig } });
57291
- }, { 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
+ );
57292
58668
  },
57293
58669
  async getPublicEventDetails(params) {
57294
58670
  const {
@@ -57312,37 +58688,44 @@ function createRiverbankClient(config2) {
57312
58688
  throw new Error("getPublicEventDetails() requires siteId");
57313
58689
  }
57314
58690
  const cacheKey = `public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
57315
- return resilientFetch(cacheKey, async (sig) => {
57316
- const requestId = "eventDetails";
57317
- const response = await apiClient({
57318
- endpoint: "batchBlockLoaders",
57319
- params: { siteId, ...stage && { stage } },
57320
- body: {
57321
- requests: [
57322
- {
57323
- id: requestId,
57324
- endpoint: "getPublicEventDetails",
57325
- params: {
57326
- ...typeof limit === "number" && { limit: String(limit) },
57327
- ...from && { from },
57328
- ...to && { to },
57329
- ...afterStartsAt && { afterStartsAt },
57330
- ...afterId && { afterId },
57331
- ...categoryIds && { categoryIds },
57332
- ...venueId && { venueId },
57333
- ...staffMemberId && { staffMemberId },
57334
- ...kind && { kind },
57335
- ...entryId && { entryId },
57336
- ...seriesId && { seriesId },
57337
- ...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
+ }
57338
58717
  }
57339
- }
57340
- ]
57341
- },
57342
- options: { signal: sig }
57343
- });
57344
- return normalizeBatchBlockLoaderResult(response, requestId);
57345
- }, { signal });
58718
+ ]
58719
+ },
58720
+ options: { signal: sig }
58721
+ });
58722
+ return normalizeBatchBlockLoaderResult(
58723
+ response,
58724
+ requestId
58725
+ );
58726
+ },
58727
+ { signal }
58728
+ );
57346
58729
  },
57347
58730
  async listPublicCourses(params) {
57348
58731
  const { siteId, limit, stage, signal } = params;
@@ -57350,14 +58733,22 @@ function createRiverbankClient(config2) {
57350
58733
  throw new Error("listPublicCourses() requires siteId");
57351
58734
  }
57352
58735
  const cacheKey = `public-courses:${siteId}:${limit ?? ""}:${stage ?? ""}`;
57353
- return resilientFetch(cacheKey, async (sig) => {
57354
- const apiParams = {
57355
- siteId,
57356
- ...typeof limit === "number" && { limit: String(limit) },
57357
- ...stage && { stage }
57358
- };
57359
- return await apiClient({ endpoint: "listPublicCourses", params: apiParams, options: { signal: sig } });
57360
- }, { 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
+ );
57361
58752
  },
57362
58753
  async listPublicTeamMembers(params) {
57363
58754
  const { siteId, stage, signal } = params;
@@ -57365,17 +58756,21 @@ function createRiverbankClient(config2) {
57365
58756
  throw new Error("listPublicTeamMembers() requires siteId");
57366
58757
  }
57367
58758
  const cacheKey = `public-team-members:${siteId}:${stage ?? ""}`;
57368
- return resilientFetch(cacheKey, async (sig) => {
57369
- const apiParams = {
57370
- siteId,
57371
- ...stage && { stage }
57372
- };
57373
- return await apiClient({
57374
- endpoint: "listPublicTeamMembers",
57375
- params: apiParams,
57376
- options: { signal: sig }
57377
- });
57378
- }, { 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
+ );
57379
58774
  },
57380
58775
  async listPublicProducts(params) {
57381
58776
  const { siteId, stage, categorySelector, signal } = params;
@@ -57384,14 +58779,22 @@ function createRiverbankClient(config2) {
57384
58779
  }
57385
58780
  const selectorKey = categorySelector ? categorySelector.kind === "category" ? `category:${categorySelector.productCategoryId}` : `current-category-page:${categorySelector.productCategoryEntryId}` : "";
57386
58781
  const cacheKey = `public-products:${siteId}:${stage ?? ""}:${selectorKey}`;
57387
- return resilientFetch(cacheKey, async (sig) => {
57388
- const apiParams = {
57389
- siteId,
57390
- ...stage && { stage },
57391
- ...encodePublicProductCategorySelector(categorySelector)
57392
- };
57393
- return await apiClient({ endpoint: "listPublicProducts", params: apiParams, options: { signal: sig } });
57394
- }, { 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
+ );
57395
58798
  },
57396
58799
  async listPublicPasses(params) {
57397
58800
  const { siteId, categories, signal } = params;
@@ -57399,13 +58802,21 @@ function createRiverbankClient(config2) {
57399
58802
  throw new Error("listPublicPasses() requires siteId");
57400
58803
  }
57401
58804
  const cacheKey = `public-passes:${siteId}:${categories ?? ""}`;
57402
- return resilientFetch(cacheKey, async (sig) => {
57403
- const apiParams = {
57404
- siteId,
57405
- ...categories && { categories }
57406
- };
57407
- return await apiClient({ endpoint: "listPublicPasses", params: apiParams, options: { signal: sig } });
57408
- }, { 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
+ );
57409
58820
  },
57410
58821
  async listPublicMemberships(params) {
57411
58822
  const { siteId, categories, signal } = params;
@@ -57413,25 +58824,44 @@ function createRiverbankClient(config2) {
57413
58824
  throw new Error("listPublicMemberships() requires siteId");
57414
58825
  }
57415
58826
  const cacheKey = `public-memberships:${siteId}:${categories ?? ""}`;
57416
- return resilientFetch(cacheKey, async (sig) => {
57417
- const apiParams = {
57418
- siteId,
57419
- ...categories && { categories }
57420
- };
57421
- return await apiClient({ endpoint: "listPublicMemberships", params: apiParams, options: { signal: sig } });
57422
- }, { 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
+ );
57423
58842
  },
57424
58843
  async resolveEntrySubroute(params) {
57425
58844
  const { siteId, entryId, kind, segment, stage, signal } = params;
57426
58845
  if (!siteId || !entryId || !kind || !segment) {
57427
- throw new Error("resolveEntrySubroute() requires siteId, entryId, kind, and segment");
58846
+ throw new Error(
58847
+ "resolveEntrySubroute() requires siteId, entryId, kind, and segment"
58848
+ );
57428
58849
  }
57429
- return resolveEntrySubrouteInternal({ siteId, entryId, kind, segment, stage, signal });
58850
+ return resolveEntrySubrouteInternal({
58851
+ siteId,
58852
+ entryId,
58853
+ kind,
58854
+ segment,
58855
+ stage,
58856
+ signal
58857
+ });
57430
58858
  },
57431
58859
  async resolveEventOccurrence(params) {
57432
58860
  const { siteId, entryId, segment, signal } = params;
57433
58861
  if (!siteId || !entryId || !segment) {
57434
- throw new Error("resolveEventOccurrence() requires siteId, entryId, and segment");
58862
+ throw new Error(
58863
+ "resolveEventOccurrence() requires siteId, entryId, and segment"
58864
+ );
57435
58865
  }
57436
58866
  const result = await resolveEntrySubrouteInternal({
57437
58867
  siteId,
@@ -57450,13 +58880,17 @@ function createRiverbankClient(config2) {
57450
58880
  throw new Error("checkRedirect() requires siteId and path");
57451
58881
  }
57452
58882
  const cacheKey = `redirect:${siteId}:${path24}`;
57453
- return resilientFetch(cacheKey, async (sig) => {
57454
- return await apiClient({
57455
- endpoint: "checkRedirect",
57456
- params: { site: siteId, path: path24 },
57457
- options: { signal: sig }
57458
- });
57459
- }, { 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
+ );
57460
58894
  },
57461
58895
  async getAllPublishedRoutes(params) {
57462
58896
  const { siteId, signal } = params;
@@ -57464,13 +58898,17 @@ function createRiverbankClient(config2) {
57464
58898
  throw new Error("getAllPublishedRoutes() requires siteId");
57465
58899
  }
57466
58900
  const cacheKey = `routable-content:${siteId}:published`;
57467
- return resilientFetch(cacheKey, async (sig) => {
57468
- return await apiClient({
57469
- endpoint: "getPublicRoutableContent",
57470
- params: { siteId, publishedOnly: "true" },
57471
- options: { signal: sig }
57472
- });
57473
- }, { 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
+ );
57474
58912
  },
57475
58913
  async getSitemapRoutes(params) {
57476
58914
  const { siteId, page, pageSize, signal } = params;
@@ -57478,17 +58916,21 @@ function createRiverbankClient(config2) {
57478
58916
  throw new Error("getSitemapRoutes() requires siteId");
57479
58917
  }
57480
58918
  const cacheKey = `sitemap:${siteId}:${page ?? 1}:${pageSize ?? "default"}`;
57481
- return resilientFetch(cacheKey, async (sig) => {
57482
- return await apiClient({
57483
- endpoint: "getPublicSitemapRoutes",
57484
- params: {
57485
- siteId,
57486
- ...page ? { page: String(page) } : {},
57487
- ...pageSize ? { pageSize: String(pageSize) } : {}
57488
- },
57489
- options: { signal: sig }
57490
- });
57491
- }, { 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
+ );
57492
58934
  },
57493
58935
  clearCache() {
57494
58936
  cache.clear();