@riverbankcms/sdk 0.82.0 → 0.84.1

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 (206) hide show
  1. package/README.md +16 -0
  2. package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-X7RLMEI6.mjs} +330 -11
  3. package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-CT67N4O3.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-EIMQ3S2V.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +200 -0
  6. package/dist/_dts/api/src/blocks.d.ts +36 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +46 -0
  8. package/dist/_dts/api/src/endpoints.d.ts +40 -0
  9. package/dist/_dts/api/src/index.d.ts +2 -2
  10. package/dist/_dts/api/src/sdk-event-pricing.d.ts +61 -0
  11. package/dist/_dts/api/src/sdk-event-schedule.d.ts +52 -0
  12. package/dist/_dts/api/src/sdk-event-upsert.d.ts +50 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +67 -33
  14. package/dist/_dts/api/src/shared-contracts.d.ts +13 -0
  15. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +22 -36
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +46 -1
  17. package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +6 -1
  18. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +3 -2
  19. package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +7 -0
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +11 -0
  21. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  22. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  23. package/dist/_dts/blocks/src/client.d.ts +4 -0
  24. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  25. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -2016
  26. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -2016
  27. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -2016
  28. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -2016
  29. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -2016
  30. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +171 -0
  31. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -2016
  32. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -2016
  33. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +3 -2
  34. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  35. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -7
  36. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +2534 -151
  37. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -2016
  38. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -2016
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -2016
  40. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +36 -3
  41. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +4 -1
  44. package/dist/_dts/blocks/src/system/fields/imageShape.d.ts +30 -0
  45. package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +25 -0
  46. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +35 -161
  47. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
  48. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +33 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +0 -2
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +275 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.override.d.ts +10 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +22 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +3 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +13 -4
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +28 -6
  60. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
  61. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
  62. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
  63. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
  64. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
  65. package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
  66. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
  67. package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
  68. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  69. package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
  70. package/dist/_dts/content-model/src/index.d.ts +1 -0
  71. package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
  72. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
  73. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
  74. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +7 -5
  75. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
  76. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
  77. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
  78. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
  79. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  80. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
  81. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
  82. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  83. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  84. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  85. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
  86. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
  87. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  88. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
  89. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
  90. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
  91. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
  92. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
  93. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  94. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
  95. package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
  96. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
  97. package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
  98. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
  99. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
  100. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
  101. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  102. package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
  103. package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
  104. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
  105. package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
  106. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  107. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
  108. package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
  109. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  110. package/dist/_dts/sdk/src/version.d.ts +1 -1
  111. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  112. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  113. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  114. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
  115. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  116. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  117. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  118. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  119. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  120. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
  121. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  122. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
  123. package/dist/_dts/theme-core/src/schema.d.ts +30 -25
  124. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  125. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
  126. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
  127. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
  128. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  129. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  130. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
  131. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
  133. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  134. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
  135. package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
  136. package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
  137. package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
  138. package/dist/{chunk-XQR6THQJ.mjs → chunk-O62NDCTI.mjs} +3390 -1331
  139. package/dist/{chunk-6FWNF3DJ.mjs → chunk-QRKJDWT7.mjs} +158 -20
  140. package/dist/{chunk-HKB6XVIP.mjs → chunk-RCTJAZSK.mjs} +2 -2
  141. package/dist/{chunk-G35HOQEN.mjs → chunk-X5ZCSU6F.mjs} +132 -46
  142. package/dist/cli/index.mjs +2925 -577
  143. package/dist/cli/init-docs/content/agents-section.md +5 -0
  144. package/dist/cli/init-docs/content/cli-reference.md +13 -0
  145. package/dist/cli/init-docs/content/content-management.md +31 -0
  146. package/dist/cli/init-docs/content/getting-started.md +14 -0
  147. package/dist/cli/init-docs/content/workflow-add-block.md +3 -1
  148. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +81 -0
  149. package/dist/cli/init-docs/content/workflow-create-page.md +13 -3
  150. package/dist/cli/init-docs/content/workflow-custom-block.md +9 -0
  151. package/dist/cli/init-docs/content/workflow-templates.md +107 -2
  152. package/dist/client/{accordion-G34C45TW.mjs → accordion-2UZPBMYM.mjs} +2 -2
  153. package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-DYXT6YB6.mjs} +5 -5
  154. package/dist/client/bookings.mjs +3477 -186
  155. package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-QH77HR6X.mjs} +3 -3
  156. package/dist/client/{cart-Q6S6LZUO.mjs → cart-X4YK4FTW.mjs} +6 -6
  157. package/dist/client/{checkout-5QJLDE4I.mjs → checkout-OM2BEPWD.mjs} +6 -6
  158. package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-3DTWLTXM.mjs} +1 -1
  159. package/dist/client/{chunk-5PQH4Y75.mjs → chunk-4OXKTA3D.mjs} +2 -2
  160. package/dist/client/{chunk-WJFHDTYF.mjs → chunk-52CGCQ7B.mjs} +5 -5
  161. package/dist/client/{chunk-CHAB5ACD.mjs → chunk-7UCLJ5SP.mjs} +2 -2
  162. package/dist/client/{chunk-U2EW7RSR.mjs → chunk-F5VRX5Y6.mjs} +1 -1
  163. package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
  164. package/dist/client/{chunk-EQKYMX4N.mjs → chunk-UHDWIXVR.mjs} +180 -157
  165. package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-VGDBVNOO.mjs} +429 -15
  166. package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
  167. package/dist/client/{chunk-CSZGLBYR.mjs → chunk-ZKUO52W3.mjs} +1 -1
  168. package/dist/client/client.mjs +2685 -847
  169. package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-YBOGURTA.mjs} +5 -5
  170. package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-K4QJVCMD.mjs} +7 -7
  171. package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-MTXGMTCZ.mjs} +7 -7
  172. package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-3PC4NL3U.mjs} +7 -7
  173. package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-TFJET6DN.mjs} +7 -7
  174. package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-QGPBGJTW.mjs} +7 -7
  175. package/dist/client/{form-BOWN7ZNQ.mjs → form-MDKR4FNB.mjs} +2 -2
  176. package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-Y5TMR3TW.mjs} +3 -3
  177. package/dist/client/hooks.mjs +2077 -546
  178. package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-RH2LG7FZ.mjs} +2 -2
  179. package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-ZR5UDGBT.mjs} +2 -2
  180. package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-OIGDR4YE.mjs} +6 -6
  181. package/dist/client/{productList-AZOLOZKM.mjs → productList-4MA5S2CX.mjs} +6 -6
  182. package/dist/client/rendering/client.mjs +2560 -1205
  183. package/dist/client/rendering/islands.mjs +19 -19
  184. package/dist/client/rendering.mjs +2932 -1021
  185. package/dist/client/{shop-ZDLO7IIG.mjs → shop-WXSYV5QO.mjs} +6 -6
  186. package/dist/preview-next/before-render.mjs +40 -0
  187. package/dist/preview-next/client/runtime.mjs +5 -5
  188. package/dist/preview-next/middleware.mjs +40 -0
  189. package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-7HJYPRWQ.mjs} +6 -6
  190. package/dist/server/components.mjs +2232 -534
  191. package/dist/server/config-validation.mjs +2068 -536
  192. package/dist/server/config.mjs +2068 -536
  193. package/dist/server/data.mjs +2077 -546
  194. package/dist/server/index.mjs +42 -1
  195. package/dist/server/next.mjs +2345 -574
  196. package/dist/server/page-converter.mjs +2684 -1220
  197. package/dist/server/prebuild.mjs +1 -1
  198. package/dist/server/rendering/server.mjs +2244 -546
  199. package/dist/server/rendering.mjs +2323 -552
  200. package/dist/server/routing.mjs +2012 -420
  201. package/dist/server/server.mjs +2153 -549
  202. package/dist/server/theme-bridge.mjs +1180 -101
  203. package/dist/server/theme.mjs +92 -1
  204. package/dist/styles/index.css +292 -36
  205. package/package.json +1 -1
  206. package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
@@ -3270,6 +3270,46 @@ var init_endpoints = __esm({
3270
3270
  auth: "user",
3271
3271
  responseKind: "json"
3272
3272
  },
3273
+ listEntrySlotBlocks: {
3274
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3275
+ method: "GET",
3276
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3277
+ auth: "user",
3278
+ responseKind: "json",
3279
+ errors: ["resource:not_found"]
3280
+ },
3281
+ listEntryPageContentSlots: {
3282
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots",
3283
+ method: "GET",
3284
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slots", "blocks"],
3285
+ auth: "user",
3286
+ responseKind: "json",
3287
+ errors: ["resource:not_found"]
3288
+ },
3289
+ createEntrySlotBlock: {
3290
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
3291
+ method: "POST",
3292
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3293
+ auth: "user",
3294
+ responseKind: "json",
3295
+ errors: ["validation:invalid_input", "resource:not_found"]
3296
+ },
3297
+ reorderEntrySlotBlocks: {
3298
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
3299
+ method: "POST",
3300
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3301
+ auth: "user",
3302
+ responseKind: "json",
3303
+ errors: ["validation:invalid_input", "resource:not_found"]
3304
+ },
3305
+ deleteEntrySlotBlock: {
3306
+ path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
3307
+ method: "DELETE",
3308
+ tags: ["site-{siteId}", "content-entry-{entryId}", "entry-slot-{slotKey}", "blocks"],
3309
+ auth: "user",
3310
+ responseKind: "json",
3311
+ errors: ["resource:not_found"]
3312
+ },
3273
3313
  createBlock: {
3274
3314
  path: "/sites/{siteId}/pages/{pageId}/blocks",
3275
3315
  method: "POST",
@@ -6365,6 +6405,12 @@ var init_endpoints = __esm({
6365
6405
  });
6366
6406
 
6367
6407
  // ../core/src/result.ts
6408
+ function ok(value) {
6409
+ return { ok: true, value };
6410
+ }
6411
+ function err(error) {
6412
+ return { ok: false, error };
6413
+ }
6368
6414
  var init_result = __esm({
6369
6415
  "../core/src/result.ts"() {
6370
6416
  "use strict";
@@ -6439,6 +6485,30 @@ var init_collections = __esm({
6439
6485
  });
6440
6486
 
6441
6487
  // ../core/src/event-pricing.ts
6488
+ function publicEventPricingType(pricing) {
6489
+ switch (pricing.kind) {
6490
+ case "drop_in":
6491
+ case "free_registration":
6492
+ return "free";
6493
+ case "single_paid":
6494
+ case "ticket_types":
6495
+ case "course":
6496
+ return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6497
+ }
6498
+ }
6499
+ function isFreePublicEventPriceDisplay(display) {
6500
+ switch (display.kind) {
6501
+ case "free":
6502
+ return true;
6503
+ case "course":
6504
+ return display.display.kind === "free";
6505
+ case "exact":
6506
+ case "from":
6507
+ case "mixed":
6508
+ case "unavailable":
6509
+ return false;
6510
+ }
6511
+ }
6442
6512
  var init_event_pricing = __esm({
6443
6513
  "../core/src/event-pricing.ts"() {
6444
6514
  "use strict";
@@ -6474,9 +6544,140 @@ var init_booking_instalments = __esm({
6474
6544
  });
6475
6545
 
6476
6546
  // ../core/src/booking-date-time.ts
6547
+ function isValidTimeZone(timeZone) {
6548
+ try {
6549
+ new Intl.DateTimeFormat(DEFAULT_LOCALE, { timeZone }).format(/* @__PURE__ */ new Date());
6550
+ return true;
6551
+ } catch {
6552
+ return false;
6553
+ }
6554
+ }
6555
+ function getSafeTimeZone(timeZone) {
6556
+ const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
6557
+ return normalized && isValidTimeZone(normalized) ? normalized : FALLBACK_TIMEZONE;
6558
+ }
6559
+ function parseStrictBookingTimeZone(timeZone) {
6560
+ const normalized = timeZone.trim();
6561
+ if (!normalized || !isValidTimeZone(normalized)) {
6562
+ return null;
6563
+ }
6564
+ return normalized;
6565
+ }
6566
+ function formatParseError(error) {
6567
+ switch (error.reason) {
6568
+ case "invalid_starts_at":
6569
+ return `Expected a valid UTC/offset-aware ISO datetime in startsAt, received "${error.value}"`;
6570
+ case "invalid_ends_at":
6571
+ return `Expected a valid UTC/offset-aware ISO datetime in endsAt, received "${error.value ?? ""}"`;
6572
+ case "invalid_time_zone":
6573
+ return `Expected a valid IANA timezone in timeZone, received "${error.value}"`;
6574
+ }
6575
+ }
6576
+ function formatToPartsLookup(date, locale, timeZone, format) {
6577
+ return new Map(
6578
+ new Intl.DateTimeFormat(locale, {
6579
+ ...format,
6580
+ timeZone
6581
+ }).formatToParts(date).map((part) => [part.type, part.value])
6582
+ );
6583
+ }
6584
+ function getZonedDateTimeParts(date, timeZone) {
6585
+ const parts = formatToPartsLookup(date, "en-GB", timeZone, {
6586
+ year: "numeric",
6587
+ month: "2-digit",
6588
+ day: "2-digit",
6589
+ hour: "2-digit",
6590
+ minute: "2-digit",
6591
+ second: "2-digit",
6592
+ hour12: false
6593
+ });
6594
+ const read = (type) => Number(parts.get(type) ?? "");
6595
+ return {
6596
+ year: read("year"),
6597
+ month: read("month"),
6598
+ day: read("day"),
6599
+ hour: read("hour"),
6600
+ minute: read("minute"),
6601
+ second: read("second")
6602
+ };
6603
+ }
6604
+ function formatDateKey(date) {
6605
+ const year = String(date.year).padStart(4, "0");
6606
+ const month = String(date.month).padStart(2, "0");
6607
+ const day = String(date.day).padStart(2, "0");
6608
+ return `${year}-${month}-${day}`;
6609
+ }
6610
+ function parseUtcIsoDateTimeString(value) {
6611
+ const normalized = value.trim();
6612
+ const hasUtcSuffix = normalized.endsWith("Z");
6613
+ const hasExplicitOffset = /[+-]\d{2}:\d{2}$/u.test(normalized);
6614
+ if (!hasUtcSuffix && !hasExplicitOffset) {
6615
+ return err("missing-timezone-offset");
6616
+ }
6617
+ const date = new Date(normalized);
6618
+ if (Number.isNaN(date.getTime())) {
6619
+ return err("invalid-date-time");
6620
+ }
6621
+ return ok(date.toISOString());
6622
+ }
6623
+ function toUtcIsoDateTimeString(value) {
6624
+ const parsed = parseUtcIsoDateTimeString(value);
6625
+ if (!parsed.ok) {
6626
+ const message = parsed.error === "missing-timezone-offset" ? `Expected an offset-aware ISO datetime, received "${value}"` : `Expected a valid ISO datetime, received "${value}"`;
6627
+ throw new Error(message);
6628
+ }
6629
+ return parsed.value;
6630
+ }
6631
+ function parseScheduledBookingDateTime(input) {
6632
+ try {
6633
+ const startsAt = toUtcIsoDateTimeString(input.startsAt);
6634
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
6635
+ if (!timeZone) {
6636
+ return {
6637
+ ok: false,
6638
+ field: "timeZone",
6639
+ reason: "invalid_time_zone",
6640
+ value: input.timeZone
6641
+ };
6642
+ }
6643
+ return {
6644
+ ok: true,
6645
+ value: {
6646
+ startsAt,
6647
+ timeZone,
6648
+ locale: input.locale
6649
+ }
6650
+ };
6651
+ } catch {
6652
+ return {
6653
+ ok: false,
6654
+ field: "startsAt",
6655
+ reason: "invalid_starts_at",
6656
+ value: input.startsAt
6657
+ };
6658
+ }
6659
+ }
6660
+ function toScheduledBookingDateTime(input) {
6661
+ const result = parseScheduledBookingDateTime(input);
6662
+ if (result.ok) {
6663
+ return result.value;
6664
+ }
6665
+ throw new Error(formatParseError(result));
6666
+ }
6667
+ function getBookingLocalDateKey(input) {
6668
+ return formatDateKey(getLocalScheduleDate(new Date(input.startsAt), input.timeZone));
6669
+ }
6670
+ function getLocalScheduleDate(date, timeZone) {
6671
+ const parts = getZonedDateTimeParts(date, getSafeTimeZone(timeZone));
6672
+ return { year: parts.year, month: parts.month, day: parts.day };
6673
+ }
6674
+ var DEFAULT_LOCALE, FALLBACK_TIMEZONE;
6477
6675
  var init_booking_date_time = __esm({
6478
6676
  "../core/src/booking-date-time.ts"() {
6479
6677
  "use strict";
6678
+ init_result();
6679
+ DEFAULT_LOCALE = "en-US";
6680
+ FALLBACK_TIMEZONE = "UTC";
6480
6681
  }
6481
6682
  });
6482
6683
 
@@ -7837,7 +8038,7 @@ function createSdkSelectField(input) {
7837
8038
  })
7838
8039
  );
7839
8040
  }
7840
- var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, manifestSchema;
8041
+ var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, manifestSchema;
7841
8042
  var init_schema2 = __esm({
7842
8043
  "../blocks/src/system/manifest/schema.ts"() {
7843
8044
  "use strict";
@@ -7896,6 +8097,21 @@ var init_schema2 = __esm({
7896
8097
  kind: z5.literal("sdk")
7897
8098
  })
7898
8099
  ]);
8100
+ visibleWhenPredicateSchema = z5.object({
8101
+ field: z5.string().min(1),
8102
+ equals: z5.any().optional(),
8103
+ notEquals: z5.any().optional(),
8104
+ oneOf: z5.array(z5.any()).optional(),
8105
+ notIn: z5.array(z5.any()).optional(),
8106
+ minItems: z5.number().int().nonnegative().optional(),
8107
+ maxItems: z5.number().int().nonnegative().optional()
8108
+ });
8109
+ visibleWhenSchema = z5.union([
8110
+ visibleWhenPredicateSchema,
8111
+ z5.object({
8112
+ allOf: z5.array(visibleWhenPredicateSchema).min(1)
8113
+ })
8114
+ ]);
7899
8115
  uiSchema = z5.object({
7900
8116
  widget: z5.string().optional(),
7901
8117
  // Container/widget presets (used by Group/Repeater widgets themselves, not for widget selection)
@@ -7928,13 +8144,7 @@ var init_schema2 = __esm({
7928
8144
  showValue: z5.boolean().optional(),
7929
8145
  pattern: z5.string().optional(),
7930
8146
  placeholder: z5.string().optional(),
7931
- visibleWhen: z5.object({
7932
- field: z5.string().min(1),
7933
- equals: z5.any().optional(),
7934
- notEquals: z5.any().optional(),
7935
- oneOf: z5.array(z5.any()).optional(),
7936
- notIn: z5.array(z5.any()).optional()
7937
- }).optional(),
8147
+ visibleWhen: visibleWhenSchema.optional(),
7938
8148
  // Modal configuration for modal and group fields
7939
8149
  modalConfig: z5.object({
7940
8150
  buttonLabel: z5.string().optional(),
@@ -9003,6 +9213,7 @@ var init_types2 = __esm({
9003
9213
  ];
9004
9214
  eyebrowTreatmentValues = [
9005
9215
  "plain",
9216
+ "accent",
9006
9217
  "pill",
9007
9218
  "accent-pill",
9008
9219
  "pill-bounce",
@@ -12791,6 +13002,102 @@ var init_joy_stamp = __esm({
12791
13002
  }
12792
13003
  });
12793
13004
 
13005
+ // ../theme-core/src/buttons/personalities/ornate-ritual.ts
13006
+ var ornateRitual;
13007
+ var init_ornate_ritual = __esm({
13008
+ "../theme-core/src/buttons/personalities/ornate-ritual.ts"() {
13009
+ "use strict";
13010
+ init_types5();
13011
+ ornateRitual = defineButtonPersonality({
13012
+ id: "ornate-ritual",
13013
+ name: "Ornate Ritual",
13014
+ description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
13015
+ tags: { tone: "classic", energy: "vibrant", motion: "subtle", era: "organic" },
13016
+ buttonSystem: {
13017
+ global: {
13018
+ cornerStyle: "rounded",
13019
+ shadow: "none",
13020
+ textTransform: "uppercase",
13021
+ fontWeight: 600,
13022
+ borderWidth: 1,
13023
+ hoverTransform: "none",
13024
+ hoverColor: "none",
13025
+ letterSpacing: "loose"
13026
+ },
13027
+ sizes: {
13028
+ sm: { padding: "0.5625rem 1.25rem", fontSize: "text-xs" },
13029
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-xs" },
13030
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-sm" },
13031
+ xl: { padding: "1rem 2.75rem", fontSize: "text-base" }
13032
+ },
13033
+ variants: [
13034
+ {
13035
+ id: "primary",
13036
+ name: "Primary",
13037
+ enabled: true,
13038
+ priority: 1,
13039
+ background: { type: "solid", colorToken: "primary" },
13040
+ textColorToken: "primaryForeground",
13041
+ borderRadius: "rounded-md",
13042
+ border: { widthClass: "border", colorToken: "primary" },
13043
+ shadow: { elevation: "none", softness: null, position: "bottom" },
13044
+ effects: {
13045
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "primary-100" } }],
13046
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
13047
+ }
13048
+ },
13049
+ {
13050
+ id: "secondary",
13051
+ name: "Secondary",
13052
+ enabled: true,
13053
+ priority: 2,
13054
+ background: { type: "solid", colorToken: "secondary" },
13055
+ textColorToken: "primaryForeground",
13056
+ borderRadius: "rounded-md",
13057
+ border: { widthClass: "border", colorToken: "primary" },
13058
+ shadow: { elevation: "none", softness: null, position: "bottom" },
13059
+ effects: {
13060
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
13061
+ }
13062
+ },
13063
+ {
13064
+ id: "outline",
13065
+ name: "Outline",
13066
+ enabled: true,
13067
+ priority: 3,
13068
+ background: { type: "transparent" },
13069
+ textColorToken: "primary",
13070
+ borderRadius: "rounded-md",
13071
+ border: { widthClass: "border", colorToken: "primary" },
13072
+ shadow: { elevation: "none", softness: null, position: "bottom" },
13073
+ effects: {
13074
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "muted" } }]
13075
+ }
13076
+ },
13077
+ {
13078
+ id: "ghost",
13079
+ name: "Ghost",
13080
+ enabled: true,
13081
+ priority: 3,
13082
+ background: { type: "transparent" },
13083
+ textColorToken: "accent",
13084
+ borderRadius: "rounded-none",
13085
+ sizes: {
13086
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
13087
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
13088
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
13089
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
13090
+ },
13091
+ effects: {
13092
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
13093
+ }
13094
+ }
13095
+ ]
13096
+ }
13097
+ });
13098
+ }
13099
+ });
13100
+
12794
13101
  // ../theme-core/src/buttons/personalities/pebble.ts
12795
13102
  var pebble;
12796
13103
  var init_pebble = __esm({
@@ -13086,6 +13393,7 @@ var init_personalities = __esm({
13086
13393
  init_editorial_link();
13087
13394
  init_ink_stamp();
13088
13395
  init_joy_stamp();
13396
+ init_ornate_ritual();
13089
13397
  init_pebble();
13090
13398
  init_showtime_pill();
13091
13399
  init_soft_pill();
@@ -13099,7 +13407,8 @@ var init_personalities = __esm({
13099
13407
  inkStamp,
13100
13408
  brushedWash,
13101
13409
  showtimePill,
13102
- joyStamp
13410
+ joyStamp,
13411
+ ornateRitual
13103
13412
  ];
13104
13413
  personalitiesById = new Map(
13105
13414
  buttonPersonalities.map((p) => [p.id, p])
@@ -13883,7 +14192,7 @@ function rgbColorValue(token) {
13883
14192
  if (alpha === void 0) {
13884
14193
  return `rgb(var(${cssVar}))`;
13885
14194
  }
13886
- return `rgba(var(${cssVar}), ${alpha})`;
14195
+ return `rgb(var(${cssVar}) / ${alpha})`;
13887
14196
  }
13888
14197
  function backgroundColorStyle(token) {
13889
14198
  return { backgroundColor: rgbColorValue(token) };
@@ -15044,7 +15353,7 @@ var init_warm_neutral = __esm({
15044
15353
  });
15045
15354
 
15046
15355
  // ../theme-core/src/palette/variants/warm-dark.ts
15047
- var warmDarkEmber;
15356
+ var warmDarkEmber, warmDarkKirtanGold;
15048
15357
  var init_warm_dark = __esm({
15049
15358
  "../theme-core/src/palette/variants/warm-dark.ts"() {
15050
15359
  "use strict";
@@ -15071,6 +15380,28 @@ var init_warm_dark = __esm({
15071
15380
  { name: "border", hex: "#894e31" }
15072
15381
  ]
15073
15382
  });
15383
+ warmDarkKirtanGold = definePaletteVariant({
15384
+ id: "warm-dark-kirtan-gold",
15385
+ name: "Warm Dark \u2014 Kirtan Gold",
15386
+ description: "Deep plum ground with pale gold primary, rose accent, and soft devotional text.",
15387
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
15388
+ mode: "dark",
15389
+ colors: [
15390
+ { name: "primary", hex: "#ffcdb2" },
15391
+ { name: "secondary", hex: "#b5838d" },
15392
+ { name: "accent", hex: "#e5989b" },
15393
+ { name: "success", hex: "#8fbf8f" },
15394
+ { name: "warning", hex: "#f2b86b" },
15395
+ { name: "destructive", hex: "#d96b6b" },
15396
+ { name: "background", hex: "#403944" },
15397
+ { name: "surface", hex: "#403944" },
15398
+ { name: "surfaceAlt", hex: "#372f3b" },
15399
+ { name: "muted", hex: "#4d4550" },
15400
+ { name: "text", hex: "#e6d2d5" },
15401
+ { name: "primaryForeground", hex: "#403944" },
15402
+ { name: "border", hex: "#8d747a" }
15403
+ ]
15404
+ });
15074
15405
  }
15075
15406
  });
15076
15407
 
@@ -15106,7 +15437,8 @@ var init_variants = __esm({
15106
15437
  softNaturalWatercolor,
15107
15438
  softNaturalLilac,
15108
15439
  // Warm-dark family (dark mode)
15109
- warmDarkEmber
15440
+ warmDarkEmber,
15441
+ warmDarkKirtanGold
15110
15442
  ];
15111
15443
  paletteVariantsById = new Map(
15112
15444
  paletteVariants.map((v) => [v.id, v])
@@ -16800,8 +17132,69 @@ var init_headerLooks = __esm({
16800
17132
  function asFooterLookId(value) {
16801
17133
  return value;
16802
17134
  }
17135
+ function asFooterLayoutId(value) {
17136
+ return value;
17137
+ }
17138
+ function asFooterStyleId(value) {
17139
+ return value;
17140
+ }
17141
+ function identityQuietFooter(theme) {
17142
+ return {
17143
+ ...theme.footer,
17144
+ variant: "simple",
17145
+ maxWidth: "container",
17146
+ background: {
17147
+ type: "color",
17148
+ color: "surface"
17149
+ },
17150
+ navStyle: "minimal",
17151
+ navWeight: "regular",
17152
+ navColor: "text",
17153
+ navLinkStyle: {
17154
+ typography: "body",
17155
+ fontWeight: "regular",
17156
+ textTransform: "none",
17157
+ italic: false,
17158
+ colorToken: "text",
17159
+ hoverColorToken: "primary",
17160
+ padding: "none",
17161
+ borderRadius: "none"
17162
+ },
17163
+ navLayout: {
17164
+ layout: "inline-wrap",
17165
+ align: "start",
17166
+ gapX: "default",
17167
+ gapY: "tight"
17168
+ },
17169
+ logo: {
17170
+ showLogo: true,
17171
+ showLogoText: true,
17172
+ placement: "left",
17173
+ size: "sm",
17174
+ align: "start"
17175
+ },
17176
+ bottomBar: {
17177
+ enabled: false,
17178
+ fullBleed: false,
17179
+ textAlign: "left",
17180
+ paddingX: "default",
17181
+ paddingY: "compact",
17182
+ borderTop: {
17183
+ width: "none"
17184
+ }
17185
+ }
17186
+ };
17187
+ }
16803
17188
  function mutedGroundingFooter(theme) {
16804
- return theme.footer;
17189
+ return {
17190
+ ...identityQuietFooter(theme),
17191
+ background: theme.footer.background,
17192
+ navStyle: theme.footer.navStyle,
17193
+ navColor: theme.footer.navColor,
17194
+ navWeight: theme.footer.navWeight,
17195
+ navLinkStyle: theme.footer.navLinkStyle,
17196
+ bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
17197
+ };
16805
17198
  }
16806
17199
  function brandTwoBandFooter(theme) {
16807
17200
  return {
@@ -16906,6 +17299,53 @@ function centeredCalmFooter(theme) {
16906
17299
  }
16907
17300
  };
16908
17301
  }
17302
+ function splitEditorialFooter(theme) {
17303
+ return {
17304
+ ...theme.footer,
17305
+ variant: "split",
17306
+ maxWidth: "container",
17307
+ background: {
17308
+ type: "color",
17309
+ color: "surface"
17310
+ },
17311
+ navStyle: "minimal",
17312
+ navWeight: "regular",
17313
+ navColor: "text",
17314
+ navLinkStyle: {
17315
+ typography: "body",
17316
+ fontWeight: "regular",
17317
+ textTransform: "none",
17318
+ italic: false,
17319
+ colorToken: "text",
17320
+ hoverColorToken: "primary",
17321
+ padding: "none",
17322
+ borderRadius: "none"
17323
+ },
17324
+ navLayout: {
17325
+ layout: "inline-wrap",
17326
+ align: "start",
17327
+ gapX: "relaxed",
17328
+ gapY: "tight"
17329
+ },
17330
+ logo: {
17331
+ showLogo: true,
17332
+ showLogoText: true,
17333
+ placement: "right",
17334
+ size: "sm",
17335
+ align: "end"
17336
+ },
17337
+ bottomBar: {
17338
+ enabled: true,
17339
+ fullBleed: false,
17340
+ textAlign: "left",
17341
+ paddingX: "default",
17342
+ paddingY: "compact",
17343
+ borderTop: {
17344
+ width: "thin"
17345
+ }
17346
+ }
17347
+ };
17348
+ }
16909
17349
  function editorialColumnsFooter(theme) {
16910
17350
  return {
16911
17351
  ...theme.footer,
@@ -16947,33 +17387,110 @@ function editorialColumnsFooter(theme) {
16947
17387
  }
16948
17388
  };
16949
17389
  }
16950
- var guaranteedFallbackFooterLookId, footerLookCatalog, footerLooksById;
17390
+ var guaranteedFallbackFooterLookId, footerLayoutCatalog, footerStyleCatalog, footerLayoutsById, footerStylesById, footerLookCatalog, footerLooksById;
16951
17391
  var init_footerLooks = __esm({
16952
17392
  "../theme-core/src/site-styles/footerLooks.ts"() {
16953
17393
  "use strict";
16954
17394
  init_customizableSurfaces();
16955
17395
  init_types2();
16956
- guaranteedFallbackFooterLookId = asFooterLookId("footer-muted-grounding");
17396
+ guaranteedFallbackFooterLookId = asFooterLookId("footer-identity-quiet");
17397
+ footerLayoutCatalog = defineExactCatalog()([
17398
+ {
17399
+ id: asFooterLayoutId("identity"),
17400
+ label: "Identity",
17401
+ description: "Logo, site text, address, and legal copy without relying on footer navigation."
17402
+ },
17403
+ {
17404
+ id: asFooterLayoutId("centered"),
17405
+ label: "Centered",
17406
+ description: "A calm centered stack for identity, short copy, and optional compact navigation.",
17407
+ maxRecommendedNavDensity: "sparse"
17408
+ },
17409
+ {
17410
+ id: asFooterLayoutId("split"),
17411
+ label: "Split",
17412
+ description: "Navigation and brand signoff separated into a wider split footer.",
17413
+ requiresFooterNav: true,
17414
+ maxRecommendedNavDensity: "balanced"
17415
+ },
17416
+ {
17417
+ id: asFooterLayoutId("columns"),
17418
+ label: "Columns",
17419
+ description: "Grouped footer navigation columns with a supporting bottom line.",
17420
+ requiresFooterNav: true,
17421
+ requiresFooterNavGroups: true
17422
+ }
17423
+ ]);
17424
+ footerStyleCatalog = defineExactCatalog()([
17425
+ {
17426
+ id: asFooterStyleId("quiet"),
17427
+ label: "Quiet",
17428
+ description: "Lightweight, practical footer treatment."
17429
+ },
17430
+ {
17431
+ id: asFooterStyleId("calm"),
17432
+ label: "Calm",
17433
+ description: "Soft centered treatment with restrained dividers."
17434
+ },
17435
+ {
17436
+ id: asFooterStyleId("editorial"),
17437
+ label: "Editorial",
17438
+ description: "Text-forward treatment with fine-line structure."
17439
+ },
17440
+ {
17441
+ id: asFooterStyleId("brand-band"),
17442
+ label: "Brand band",
17443
+ description: "High-contrast brand treatment with a stronger bottom bar."
17444
+ }
17445
+ ]);
17446
+ footerLayoutsById = new Map(
17447
+ footerLayoutCatalog.map((layout) => [layout.id, layout])
17448
+ );
17449
+ footerStylesById = new Map(
17450
+ footerStyleCatalog.map((style) => [style.id, style])
17451
+ );
16957
17452
  footerLookCatalog = defineExactCatalog()([
17453
+ {
17454
+ id: asFooterLookId("footer-identity-quiet"),
17455
+ label: "Identity footer",
17456
+ layoutId: asFooterLayoutId("identity"),
17457
+ styleId: asFooterStyleId("quiet"),
17458
+ compile: identityQuietFooter
17459
+ },
16958
17460
  {
16959
17461
  id: asFooterLookId("footer-muted-grounding"),
16960
17462
  label: "Muted grounding footer",
17463
+ layoutId: asFooterLayoutId("identity"),
17464
+ styleId: asFooterStyleId("quiet"),
17465
+ hiddenFromLayoutStyleControls: true,
16961
17466
  compile: mutedGroundingFooter
16962
17467
  },
16963
17468
  {
16964
17469
  id: asFooterLookId("footer-centered-calm"),
16965
17470
  label: "Centered calm footer",
17471
+ layoutId: asFooterLayoutId("centered"),
17472
+ styleId: asFooterStyleId("calm"),
16966
17473
  compile: centeredCalmFooter
16967
17474
  },
17475
+ {
17476
+ id: asFooterLookId("footer-split-editorial"),
17477
+ label: "Split editorial footer",
17478
+ layoutId: asFooterLayoutId("split"),
17479
+ styleId: asFooterStyleId("editorial"),
17480
+ compile: splitEditorialFooter
17481
+ },
16968
17482
  {
16969
17483
  id: asFooterLookId("footer-editorial-columns"),
16970
17484
  label: "Editorial columns footer",
17485
+ layoutId: asFooterLayoutId("columns"),
17486
+ styleId: asFooterStyleId("editorial"),
16971
17487
  compile: editorialColumnsFooter
16972
17488
  },
16973
17489
  {
16974
17490
  id: asFooterLookId("site-footer-brand-two-band"),
16975
17491
  label: "Two-band brand footer",
16976
- maxRecommendedNavDensity: "balanced",
17492
+ layoutId: asFooterLayoutId("split"),
17493
+ styleId: asFooterStyleId("brand-band"),
16977
17494
  allowedContentPresence: ["default-footer", "default-and-blocks"],
16978
17495
  compile: brandTwoBandFooter
16979
17496
  }
@@ -17063,7 +17580,7 @@ function defineTypographyPreset(preset2) {
17063
17580
  id: asTypographyPresetId(preset2.id)
17064
17581
  };
17065
17582
  }
17066
- var bodyReadablePolicy, headingFlexiblePolicy, displayHeadingPolicy, modernSansTypography, warmRoundedTypography, editorialSerifTypography, classicSerifTypography, luxeContrastTypography, boldDisplayTypography, originalJoyTypography, typographyPresets, typographyPresetsById;
17583
+ var bodyReadablePolicy, headingFlexiblePolicy, displayHeadingPolicy, modernSansTypography, warmRoundedTypography, editorialSerifTypography, classicSerifTypography, luxeContrastTypography, kirtanOrnateTypography, boldDisplayTypography, originalJoyTypography, typographyPresets, typographyPresetsById;
17067
17584
  var init_typographyPresets = __esm({
17068
17585
  "../theme-core/src/site-styles/typographyPresets.ts"() {
17069
17586
  "use strict";
@@ -17196,6 +17713,30 @@ var init_typographyPresets = __esm({
17196
17713
  },
17197
17714
  scale: "spacious"
17198
17715
  };
17716
+ kirtanOrnateTypography = {
17717
+ body: {
17718
+ family: "Jost, system-ui, sans-serif",
17719
+ size: "md",
17720
+ weight: "regular",
17721
+ lineHeight: "relaxed",
17722
+ letterSpacing: "normal"
17723
+ },
17724
+ headings: {
17725
+ default: {
17726
+ family: "Marcellus, Georgia, serif",
17727
+ weight: "regular",
17728
+ lineHeight: "normal",
17729
+ letterSpacing: "normal",
17730
+ colorToken: "primary",
17731
+ italic: null,
17732
+ case: null
17733
+ },
17734
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
17735
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
17736
+ h3: { size: "md", weight: "regular", lineHeight: "relaxed", letterSpacing: "normal", italic: null }
17737
+ },
17738
+ scale: "spacious"
17739
+ };
17199
17740
  boldDisplayTypography = {
17200
17741
  body: {
17201
17742
  family: "Manrope, system-ui, sans-serif",
@@ -17230,16 +17771,16 @@ var init_typographyPresets = __esm({
17230
17771
  },
17231
17772
  headings: {
17232
17773
  default: {
17233
- family: "Bricolage Grotesque, system-ui, sans-serif",
17234
- weight: "bold",
17774
+ family: "Lobster, cursive",
17775
+ weight: "regular",
17235
17776
  lineHeight: "normal",
17236
- letterSpacing: "tight",
17777
+ letterSpacing: "normal",
17237
17778
  italic: null,
17238
17779
  case: null
17239
17780
  },
17240
- h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
17241
- h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
17242
- h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
17781
+ h1: { size: "2xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
17782
+ h2: { size: "xl", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null },
17783
+ h3: { size: "lg", weight: "regular", lineHeight: "normal", letterSpacing: "normal", italic: null }
17243
17784
  },
17244
17785
  scale: "balanced"
17245
17786
  };
@@ -17304,6 +17845,32 @@ var init_typographyPresets = __esm({
17304
17845
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
17305
17846
  typography: luxeContrastTypography
17306
17847
  }),
17848
+ defineTypographyPreset({
17849
+ id: "typography-preset:kirtan-ornate",
17850
+ name: "Kirtan Ornate",
17851
+ description: "Marcellus devotional headings over a refined Jost body, matching dark ceremonial layouts.",
17852
+ defaultFonts: { body: "Jost, system-ui, sans-serif", heading: "Marcellus, Georgia, serif" },
17853
+ recommendedFonts: {
17854
+ body: ["Jost", "Manrope", "Inter"],
17855
+ heading: ["Marcellus", "Cormorant Garamond", "Playfair Display"]
17856
+ },
17857
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
17858
+ typography: kirtanOrnateTypography,
17859
+ heroTypography: {
17860
+ headlineSize: "6xl",
17861
+ headlineLineHeight: "normal",
17862
+ subheadlineSize: "xl",
17863
+ subheadlineLineHeight: "relaxed",
17864
+ microHeadlineSize: "5xl",
17865
+ microHeadlineLineHeight: "normal",
17866
+ microSubheadlineSize: "lg",
17867
+ microSubheadlineLineHeight: "relaxed",
17868
+ responsive: {
17869
+ tablet: { headlineSize: "5xl" },
17870
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
17871
+ }
17872
+ }
17873
+ }),
17307
17874
  defineTypographyPreset({
17308
17875
  id: "typography-preset:bold-display",
17309
17876
  name: "Bold Display",
@@ -17333,11 +17900,11 @@ var init_typographyPresets = __esm({
17333
17900
  defineTypographyPreset({
17334
17901
  id: "typography-preset:original-joy",
17335
17902
  name: "Original Joy",
17336
- description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
17337
- defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
17903
+ description: "Lobster display headings over a clean DM Sans body, expressive and warm.",
17904
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Lobster, cursive" },
17338
17905
  recommendedFonts: {
17339
17906
  body: ["DM Sans", "Inter", "Manrope"],
17340
- heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
17907
+ heading: ["Lobster", "Bricolage Grotesque", "Space Grotesk"]
17341
17908
  },
17342
17909
  slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
17343
17910
  typography: originalJoyTypography,
@@ -17363,6 +17930,344 @@ var init_typographyPresets = __esm({
17363
17930
  }
17364
17931
  });
17365
17932
 
17933
+ // ../theme-core/src/site-styles/designState.ts
17934
+ import { z as z27 } from "zod";
17935
+ function uniqueNonEmpty(values) {
17936
+ const uniqueValues = [...new Set(values)];
17937
+ const firstValue = uniqueValues[0];
17938
+ if (!firstValue) {
17939
+ throw new Error("Expected at least one Theme V2 design state option.");
17940
+ }
17941
+ return [firstValue, ...uniqueValues.slice(1)];
17942
+ }
17943
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, heroCompositionIntentSchema, heroTypographyScaleIntentSchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eventListTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
17944
+ var init_designState = __esm({
17945
+ "../theme-core/src/site-styles/designState.ts"() {
17946
+ "use strict";
17947
+ init_sourceCatalogs();
17948
+ init_types2();
17949
+ init_schemaVersionedJson();
17950
+ init_rawStyleFields();
17951
+ init_rawStyleFields();
17952
+ themeV2DesignStateSchemaVersion = 1;
17953
+ designResolutionPolicySchema = z27.enum(["generated", "user", "admin", "sdk"]);
17954
+ runtimeStyleFieldNameSchema = z27.enum(themeV2RuntimeStyleFieldNames);
17955
+ nonEmptyRuntimeStyleFieldNamesSchema = z27.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
17956
+ fields3[0],
17957
+ ...fields3.slice(1)
17958
+ ]);
17959
+ heroLegibilityStrategySchema = z27.enum([
17960
+ "none",
17961
+ "scrim-gradient",
17962
+ "solid-panel"
17963
+ ]);
17964
+ heroCompositionIntentSchema = z27.enum([
17965
+ "center",
17966
+ "bottom-left"
17967
+ ]);
17968
+ heroTypographyScaleIntentSchema = z27.enum([
17969
+ "quiet",
17970
+ "editorial",
17971
+ "display",
17972
+ "poster"
17973
+ ]);
17974
+ sectionHeightIntentSchema = z27.enum([
17975
+ "default",
17976
+ "banner",
17977
+ "hero",
17978
+ "immersive"
17979
+ ]);
17980
+ imageSurfaceTreatmentIntensitySchema = z27.enum(["soft", "balanced", "strong"]);
17981
+ imageSurfaceMotionSchema = z27.enum(["static", "fixed-frame"]);
17982
+ imageSurfaceTreatmentSchema = z27.discriminatedUnion("kind", [
17983
+ z27.object({ kind: z27.literal("none") }).strict(),
17984
+ z27.object({
17985
+ kind: z27.literal("brand-scrim"),
17986
+ token: z27.enum(["primary", "secondary", "accent"]),
17987
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
17988
+ }).strict(),
17989
+ z27.object({
17990
+ kind: z27.literal("brand-wash"),
17991
+ token: z27.enum(["primary", "secondary", "accent"]),
17992
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
17993
+ }).strict(),
17994
+ z27.object({
17995
+ kind: z27.literal("neutral-scrim"),
17996
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
17997
+ }).strict(),
17998
+ z27.object({
17999
+ kind: z27.literal("neutral-wash"),
18000
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
18001
+ }).strict(),
18002
+ z27.object({
18003
+ kind: z27.literal("solid-panel"),
18004
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
18005
+ }).strict()
18006
+ ]);
18007
+ testimonialCardTreatmentSchema = z27.enum(["default", "accent-quote"]);
18008
+ tileTreatmentSchema = z27.enum(tileTreatmentValues);
18009
+ eventListTreatmentSchema = z27.enum(eventListTreatmentValues);
18010
+ eyebrowTreatmentSchema = z27.enum(eyebrowTreatmentValues);
18011
+ userPanelTreatments = uniqueNonEmpty(
18012
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
18013
+ );
18014
+ userFlushTreatments = uniqueNonEmpty(
18015
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
18016
+ );
18017
+ userFlushBleeds = uniqueNonEmpty(
18018
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
18019
+ );
18020
+ contentFrameIntentSchema = z27.discriminatedUnion("kind", [
18021
+ z27.object({ kind: z27.literal("plain") }).strict(),
18022
+ z27.object({
18023
+ kind: z27.literal("panel"),
18024
+ treatment: z27.enum(userPanelTreatments)
18025
+ }).strict(),
18026
+ z27.object({
18027
+ kind: z27.literal("flush-panel"),
18028
+ treatment: z27.enum(userFlushTreatments),
18029
+ bleed: z27.enum(userFlushBleeds)
18030
+ }).strict()
18031
+ ]);
18032
+ blockDesignPlanSchema = z27.object({
18033
+ blockId: z27.string().min(1).transform(asDesignBlockId),
18034
+ blockKind: z27.string().min(1),
18035
+ purpose: z27.string().min(1),
18036
+ sectionSurface: z27.enum(userDesignOptionCatalog.sectionSurfaces),
18037
+ contentFrame: contentFrameIntentSchema,
18038
+ itemSurface: z27.enum(userDesignOptionCatalog.itemSurfaces),
18039
+ transitionAfter: z27.enum(userDesignOptionCatalog.transitions),
18040
+ emphasis: z27.enum(userDesignOptionCatalog.emphases),
18041
+ sectionHeight: sectionHeightIntentSchema.optional(),
18042
+ heroLegibility: heroLegibilityStrategySchema.optional(),
18043
+ heroComposition: heroCompositionIntentSchema.optional(),
18044
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
18045
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
18046
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
18047
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
18048
+ tileTreatment: tileTreatmentSchema.optional(),
18049
+ eventListTreatment: eventListTreatmentSchema.optional(),
18050
+ eyebrowTreatment: eyebrowTreatmentSchema.optional()
18051
+ }).strict();
18052
+ styleAuthoritySchema = z27.discriminatedUnion("kind", [
18053
+ z27.object({
18054
+ kind: z27.literal("theme-v2"),
18055
+ source: designResolutionPolicySchema,
18056
+ siteStyleId: z27.string().min(1).transform(asSiteStyleId),
18057
+ templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
18058
+ templateVersion: z27.number().int().nonnegative(),
18059
+ resolverVersion: z27.number().int().nonnegative()
18060
+ }).strict(),
18061
+ z27.object({
18062
+ kind: z27.literal("legacy-raw"),
18063
+ reason: z27.enum(["pre-theme-v2", "manual-runtime-fields"])
18064
+ }).strict(),
18065
+ z27.object({
18066
+ kind: z27.literal("advanced-detached"),
18067
+ reason: z27.literal("detached-custom-runtime-fields")
18068
+ }).strict()
18069
+ ]);
18070
+ blockRuntimeStyleAuthoritySchema = z27.object({
18071
+ unit: z27.literal("block-runtime-fields"),
18072
+ blockId: z27.string().min(1).transform(asDesignBlockId),
18073
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
18074
+ authority: styleAuthoritySchema
18075
+ }).strict();
18076
+ persistedPageDesignStateV1Schema = z27.object({
18077
+ schemaVersion: z27.literal(themeV2DesignStateSchemaVersion),
18078
+ siteStyleId: z27.string().min(1).transform(asSiteStyleId),
18079
+ templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
18080
+ templateVersion: z27.number().int().nonnegative(),
18081
+ resolverVersion: z27.number().int().nonnegative(),
18082
+ rhythmPresetId: z27.string().min(1),
18083
+ blocks: z27.array(blockDesignPlanSchema),
18084
+ styleAuthorities: z27.array(blockRuntimeStyleAuthoritySchema)
18085
+ }).strict();
18086
+ }
18087
+ });
18088
+
18089
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
18090
+ function defineDesignRuntimeRules(rules) {
18091
+ return rules;
18092
+ }
18093
+ function defineComponentRuntimeRules(rules) {
18094
+ return rules;
18095
+ }
18096
+ function uniformSectionForeground(token) {
18097
+ return {
18098
+ textColor: token,
18099
+ headingColor: token,
18100
+ linkColor: token,
18101
+ supportingColor: token
18102
+ };
18103
+ }
18104
+ var defaultDesignRuntimeRules, defaultComponentRuntimeRules;
18105
+ var init_runtimeCompiler = __esm({
18106
+ "../theme-core/src/site-styles/runtimeCompiler.ts"() {
18107
+ "use strict";
18108
+ init_schema3();
18109
+ init_modern_minimal();
18110
+ init_expandPalette();
18111
+ init_personalities();
18112
+ init_variants();
18113
+ init_designState();
18114
+ init_types2();
18115
+ init_accessibleSurfaces();
18116
+ defaultDesignRuntimeRules = defineDesignRuntimeRules({
18117
+ sectionSurfaces: {
18118
+ base: {},
18119
+ "muted-band": {
18120
+ background: {
18121
+ type: "color",
18122
+ color: "muted"
18123
+ }
18124
+ },
18125
+ "accent-band": {
18126
+ background: {
18127
+ type: "color",
18128
+ color: "primary"
18129
+ }
18130
+ },
18131
+ "brand-depth-band": {
18132
+ background: {
18133
+ type: "color",
18134
+ color: "primary-800"
18135
+ }
18136
+ },
18137
+ "hero-image": {
18138
+ background: {
18139
+ type: "image",
18140
+ opacity: 1,
18141
+ position: "center center",
18142
+ ...uniformSectionForeground("text")
18143
+ }
18144
+ }
18145
+ },
18146
+ heroLegibility: {
18147
+ "scrim-gradient": {
18148
+ type: "gradient",
18149
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
18150
+ opacity: 1
18151
+ },
18152
+ "solid-panel": {
18153
+ type: "color",
18154
+ color: "surface",
18155
+ opacity: 0.88
18156
+ }
18157
+ },
18158
+ transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
18159
+ });
18160
+ defaultComponentRuntimeRules = defineComponentRuntimeRules({
18161
+ panelFrames: {
18162
+ inset: {
18163
+ spacing: "comfortable",
18164
+ rounded: "xl",
18165
+ raised: false,
18166
+ background: {
18167
+ type: "color",
18168
+ color: "surfaceAlt",
18169
+ textColor: "text"
18170
+ }
18171
+ },
18172
+ raised: {
18173
+ spacing: "comfortable",
18174
+ rounded: "xl",
18175
+ raised: true,
18176
+ background: {
18177
+ type: "color",
18178
+ color: "surfaceAlt",
18179
+ textColor: "text"
18180
+ }
18181
+ },
18182
+ editorial: {
18183
+ spacing: "medium",
18184
+ rounded: "xl",
18185
+ raised: false,
18186
+ background: {
18187
+ type: "color",
18188
+ color: "surface",
18189
+ textColor: "text"
18190
+ }
18191
+ }
18192
+ },
18193
+ flushFrames: {
18194
+ "media-panel": {
18195
+ fullWidth: true,
18196
+ spacing: "none",
18197
+ rounded: "none",
18198
+ raised: false
18199
+ }
18200
+ },
18201
+ itemSurfaces: {
18202
+ none: null,
18203
+ default: {
18204
+ spacing: "medium",
18205
+ rounded: "lg",
18206
+ raised: false
18207
+ },
18208
+ flat: {
18209
+ spacing: "medium",
18210
+ rounded: "lg",
18211
+ raised: false
18212
+ },
18213
+ outlined: {
18214
+ spacing: "medium",
18215
+ rounded: "lg",
18216
+ raised: false,
18217
+ border: {
18218
+ enabled: true,
18219
+ width: "1",
18220
+ colorToken: "border"
18221
+ }
18222
+ },
18223
+ raised: {
18224
+ spacing: "medium",
18225
+ rounded: "xl",
18226
+ raised: true
18227
+ },
18228
+ inset: {
18229
+ treatment: "soft-panel",
18230
+ spacing: "comfortable",
18231
+ rounded: "xl",
18232
+ raised: false,
18233
+ border: {
18234
+ enabled: false
18235
+ },
18236
+ background: {
18237
+ type: "color",
18238
+ color: "surfaceAlt",
18239
+ textColor: "text"
18240
+ }
18241
+ },
18242
+ editorial: {
18243
+ // Boxless open column with a short rule on top; the visual treatment
18244
+ // lives in blocks-static/card-treatments.css.
18245
+ treatment: "editorial-rule",
18246
+ spacing: "none",
18247
+ rounded: "none",
18248
+ raised: false,
18249
+ border: {
18250
+ enabled: false
18251
+ }
18252
+ },
18253
+ "color-blocked": {
18254
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
18255
+ // (by position) and staggered offset live in
18256
+ // blocks-static/card-treatments.css; here we set the shared shape:
18257
+ // generous padding, large radius, no border, flat (no shadow).
18258
+ treatment: "color-blocked",
18259
+ spacing: "spacious",
18260
+ rounded: "2xl",
18261
+ raised: false,
18262
+ border: {
18263
+ enabled: false
18264
+ }
18265
+ }
18266
+ }
18267
+ });
18268
+ }
18269
+ });
18270
+
17366
18271
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
17367
18272
  function uniqueContentFrameKinds() {
17368
18273
  const kinds = [
@@ -17420,6 +18325,7 @@ function defineCuratedSiteStyle(input) {
17420
18325
  // clean/minimal styles default to none.
17421
18326
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
17422
18327
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
18328
+ ...input.designRuntimeRules ? { designRuntimeRules: input.designRuntimeRules } : {},
17423
18329
  ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
17424
18330
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
17425
18331
  defaultHeaderSelection: input.defaultHeaderSelection ? {
@@ -17601,7 +18507,7 @@ function defaultTypographyPresetChoicesForRecipe(recipe) {
17601
18507
  ];
17602
18508
  }
17603
18509
  }
17604
- var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, expressiveUnderlineInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
18510
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
17605
18511
  var init_curatedSiteStyles = __esm({
17606
18512
  "../theme-core/src/site-styles/curatedSiteStyles.ts"() {
17607
18513
  "use strict";
@@ -17616,6 +18522,7 @@ var init_curatedSiteStyles = __esm({
17616
18522
  init_sourceCatalogs();
17617
18523
  init_types2();
17618
18524
  init_typographyPresets();
18525
+ init_runtimeCompiler();
17619
18526
  SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
17620
18527
  SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
17621
18528
  curatedSiteStyleIdValues = [
@@ -17633,6 +18540,7 @@ var init_curatedSiteStyles = __esm({
17633
18540
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
17634
18541
  "site-style:bold-launch",
17635
18542
  "site-style:south-west-twerk-school",
18543
+ "site-style:kirtan-ornate",
17636
18544
  "site-style:original-joy"
17637
18545
  ];
17638
18546
  quietBudget = {
@@ -17659,6 +18567,50 @@ var init_curatedSiteStyles = __esm({
17659
18567
  mediaDensity: "high",
17660
18568
  decorativeRepetition: "medium"
17661
18569
  };
18570
+ kirtanOrnateDesignRuntimeRules = defineDesignRuntimeRules({
18571
+ ...defaultDesignRuntimeRules,
18572
+ defaultEyebrowTreatment: "accent",
18573
+ sectionSurfaces: {
18574
+ ...defaultDesignRuntimeRules.sectionSurfaces,
18575
+ "muted-band": {
18576
+ background: {
18577
+ type: "color",
18578
+ color: "muted"
18579
+ },
18580
+ foreground: {
18581
+ textColor: "text",
18582
+ headingColor: "primary",
18583
+ linkColor: "primary",
18584
+ supportingColor: "text"
18585
+ }
18586
+ },
18587
+ "brand-depth-band": {
18588
+ background: {
18589
+ type: "color",
18590
+ color: "primary-800"
18591
+ },
18592
+ foreground: {
18593
+ textColor: "text",
18594
+ headingColor: "primary",
18595
+ linkColor: "primary",
18596
+ supportingColor: "text"
18597
+ }
18598
+ },
18599
+ "hero-image": {
18600
+ background: {
18601
+ type: "image",
18602
+ opacity: 1,
18603
+ position: "center center"
18604
+ },
18605
+ foreground: {
18606
+ textColor: "text",
18607
+ headingColor: "primary",
18608
+ linkColor: "primary",
18609
+ supportingColor: "text"
18610
+ }
18611
+ }
18612
+ }
18613
+ });
17662
18614
  expressiveUnderlineInputs = {
17663
18615
  base: {
17664
18616
  background: { type: "transparent" },
@@ -17696,6 +18648,43 @@ var init_curatedSiteStyles = __esm({
17696
18648
  opacity: 0.6
17697
18649
  }
17698
18650
  };
18651
+ ornateDarkInputs = {
18652
+ base: {
18653
+ background: { type: "solid", colorToken: "surfaceAlt" },
18654
+ textColorToken: "text",
18655
+ border: {
18656
+ widthClass: "border",
18657
+ colorToken: "primary/45",
18658
+ style: "all"
18659
+ },
18660
+ corners: "square",
18661
+ shadow: null,
18662
+ spacing: "medium",
18663
+ fontSize: "base"
18664
+ },
18665
+ label: {
18666
+ textColorToken: "primary",
18667
+ fontWeight: "semibold",
18668
+ fontSize: "xs",
18669
+ textTransform: "uppercase",
18670
+ letterSpacing: "wider",
18671
+ opacity: 1
18672
+ },
18673
+ focus: {
18674
+ ringColorToken: "primary/18",
18675
+ ringWidth: "2",
18676
+ borderColorToken: "primary/70"
18677
+ },
18678
+ error: {
18679
+ borderColorToken: "destructive",
18680
+ textColorToken: "destructive"
18681
+ },
18682
+ disabled: {
18683
+ backgroundColorToken: "muted",
18684
+ textColorToken: "mutedText",
18685
+ opacity: 0.6
18686
+ }
18687
+ };
17699
18688
  generatedContentFrameKinds = uniqueContentFrameKinds();
17700
18689
  curatedSiteStyles = [
17701
18690
  defineCuratedSiteStyle({
@@ -18466,6 +19455,80 @@ var init_curatedSiteStyles = __esm({
18466
19455
  paletteChoice("high-contrast-ink")
18467
19456
  ]
18468
19457
  }),
19458
+ defineCuratedSiteStyle({
19459
+ id: "site-style:kirtan-ornate",
19460
+ name: "Kirtan Ornate",
19461
+ headingDecoration: { family: "short-center-rule", colorToken: "accent" },
19462
+ description: "Ceremonial, jewel-toned, and devotional: ornate frames, warm contrast, and composed rhythm for intimate music gatherings.",
19463
+ generationBrief: "Use a deep plum ground with pale gold as the main brand color, rose accent details, cream text, spacious split hero sections, devotional editorial headings, compact event lists, and framed conversion sections. The mood should feel soulful and ceremonial, not gothic or theatrical.",
19464
+ selectionKeywordRules: [
19465
+ { kind: "word", value: "kirtan" },
19466
+ { kind: "word", value: "chanting" },
19467
+ { kind: "word", value: "ceremony" },
19468
+ { kind: "word", value: "devotional" }
19469
+ ],
19470
+ tokenRecipes: {
19471
+ palette: "brand-led",
19472
+ contrast: "strong",
19473
+ radius: "soft",
19474
+ shadow: "subtle",
19475
+ typography: "serif-editorial",
19476
+ spacing: "airy",
19477
+ motion: "subtle"
19478
+ },
19479
+ compositionBudget: expressiveBudget,
19480
+ typographyPresetChoices: [
19481
+ typographyChoice("typography-preset:kirtan-ornate"),
19482
+ typographyChoice("typography-preset:luxe-contrast"),
19483
+ typographyChoice("typography-preset:editorial-serif")
19484
+ ],
19485
+ defaultTypographyPresetId: "typography-preset:kirtan-ornate",
19486
+ themeOverrides: {
19487
+ accordions: warmInsetAccordionSystem,
19488
+ cards: originalJoyCardSystem,
19489
+ testimonialQuote: serifDisplayQuote,
19490
+ bodyText: {
19491
+ intro: {
19492
+ paragraphSize: "editorial",
19493
+ headingSize: "editorial"
19494
+ }
19495
+ },
19496
+ inputs: ornateDarkInputs
19497
+ },
19498
+ designRuntimeRules: kirtanOrnateDesignRuntimeRules,
19499
+ recommendedAppearancePresetIds: [
19500
+ "hero-brand-scrim-fixed-frame",
19501
+ "media-text-quiet-story",
19502
+ "events-lined-panel",
19503
+ "schedule-details-brand-depth",
19504
+ "testimonials-statement-cards",
19505
+ "contact-form-panel"
19506
+ ],
19507
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
19508
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
19509
+ recommendedHeaderStyleChoicesByLayout: {
19510
+ floating: [
19511
+ headerStyleChoice("minimal-surface"),
19512
+ headerStyleChoice("split-glass"),
19513
+ headerStyleChoice("glass")
19514
+ ]
19515
+ },
19516
+ recommendedHeaderLookIds: ["minimal-transparent"],
19517
+ recommendedFooterLookIds: [
19518
+ "site-footer-brand-two-band",
19519
+ "footer-muted-grounding"
19520
+ ],
19521
+ buttonPersonalityChoices: [
19522
+ buttonChoice("ornate-ritual"),
19523
+ buttonChoice("joy-stamp"),
19524
+ buttonChoice("ink-stamp")
19525
+ ],
19526
+ paletteVariantChoices: [
19527
+ paletteChoice("warm-dark-kirtan-gold"),
19528
+ paletteChoice("warm-dark-ember"),
19529
+ paletteChoice("brand-led-burgundy-gold")
19530
+ ]
19531
+ }),
18469
19532
  defineCuratedSiteStyle({
18470
19533
  id: "site-style:original-joy",
18471
19534
  name: "Original Joy",
@@ -18612,344 +19675,6 @@ var init_resolver2 = __esm({
18612
19675
  }
18613
19676
  });
18614
19677
 
18615
- // ../theme-core/src/site-styles/designState.ts
18616
- import { z as z27 } from "zod";
18617
- function uniqueNonEmpty(values) {
18618
- const uniqueValues = [...new Set(values)];
18619
- const firstValue = uniqueValues[0];
18620
- if (!firstValue) {
18621
- throw new Error("Expected at least one Theme V2 design state option.");
18622
- }
18623
- return [firstValue, ...uniqueValues.slice(1)];
18624
- }
18625
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, heroCompositionIntentSchema, heroTypographyScaleIntentSchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eventListTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
18626
- var init_designState = __esm({
18627
- "../theme-core/src/site-styles/designState.ts"() {
18628
- "use strict";
18629
- init_sourceCatalogs();
18630
- init_types2();
18631
- init_schemaVersionedJson();
18632
- init_rawStyleFields();
18633
- init_rawStyleFields();
18634
- themeV2DesignStateSchemaVersion = 1;
18635
- designResolutionPolicySchema = z27.enum(["generated", "user", "admin", "sdk"]);
18636
- runtimeStyleFieldNameSchema = z27.enum(themeV2RuntimeStyleFieldNames);
18637
- nonEmptyRuntimeStyleFieldNamesSchema = z27.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
18638
- fields3[0],
18639
- ...fields3.slice(1)
18640
- ]);
18641
- heroLegibilityStrategySchema = z27.enum([
18642
- "none",
18643
- "scrim-gradient",
18644
- "solid-panel"
18645
- ]);
18646
- heroCompositionIntentSchema = z27.enum([
18647
- "center",
18648
- "bottom-left"
18649
- ]);
18650
- heroTypographyScaleIntentSchema = z27.enum([
18651
- "quiet",
18652
- "editorial",
18653
- "display",
18654
- "poster"
18655
- ]);
18656
- sectionHeightIntentSchema = z27.enum([
18657
- "default",
18658
- "banner",
18659
- "hero",
18660
- "immersive"
18661
- ]);
18662
- imageSurfaceTreatmentIntensitySchema = z27.enum(["soft", "balanced", "strong"]);
18663
- imageSurfaceMotionSchema = z27.enum(["static", "fixed-frame"]);
18664
- imageSurfaceTreatmentSchema = z27.discriminatedUnion("kind", [
18665
- z27.object({ kind: z27.literal("none") }).strict(),
18666
- z27.object({
18667
- kind: z27.literal("brand-scrim"),
18668
- token: z27.enum(["primary", "secondary", "accent"]),
18669
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
18670
- }).strict(),
18671
- z27.object({
18672
- kind: z27.literal("brand-wash"),
18673
- token: z27.enum(["primary", "secondary", "accent"]),
18674
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
18675
- }).strict(),
18676
- z27.object({
18677
- kind: z27.literal("neutral-scrim"),
18678
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
18679
- }).strict(),
18680
- z27.object({
18681
- kind: z27.literal("neutral-wash"),
18682
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
18683
- }).strict(),
18684
- z27.object({
18685
- kind: z27.literal("solid-panel"),
18686
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
18687
- }).strict()
18688
- ]);
18689
- testimonialCardTreatmentSchema = z27.enum(["default", "accent-quote"]);
18690
- tileTreatmentSchema = z27.enum(tileTreatmentValues);
18691
- eventListTreatmentSchema = z27.enum(eventListTreatmentValues);
18692
- eyebrowTreatmentSchema = z27.enum(eyebrowTreatmentValues);
18693
- userPanelTreatments = uniqueNonEmpty(
18694
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
18695
- );
18696
- userFlushTreatments = uniqueNonEmpty(
18697
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
18698
- );
18699
- userFlushBleeds = uniqueNonEmpty(
18700
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
18701
- );
18702
- contentFrameIntentSchema = z27.discriminatedUnion("kind", [
18703
- z27.object({ kind: z27.literal("plain") }).strict(),
18704
- z27.object({
18705
- kind: z27.literal("panel"),
18706
- treatment: z27.enum(userPanelTreatments)
18707
- }).strict(),
18708
- z27.object({
18709
- kind: z27.literal("flush-panel"),
18710
- treatment: z27.enum(userFlushTreatments),
18711
- bleed: z27.enum(userFlushBleeds)
18712
- }).strict()
18713
- ]);
18714
- blockDesignPlanSchema = z27.object({
18715
- blockId: z27.string().min(1).transform(asDesignBlockId),
18716
- blockKind: z27.string().min(1),
18717
- purpose: z27.string().min(1),
18718
- sectionSurface: z27.enum(userDesignOptionCatalog.sectionSurfaces),
18719
- contentFrame: contentFrameIntentSchema,
18720
- itemSurface: z27.enum(userDesignOptionCatalog.itemSurfaces),
18721
- transitionAfter: z27.enum(userDesignOptionCatalog.transitions),
18722
- emphasis: z27.enum(userDesignOptionCatalog.emphases),
18723
- sectionHeight: sectionHeightIntentSchema.optional(),
18724
- heroLegibility: heroLegibilityStrategySchema.optional(),
18725
- heroComposition: heroCompositionIntentSchema.optional(),
18726
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
18727
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
18728
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
18729
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
18730
- tileTreatment: tileTreatmentSchema.optional(),
18731
- eventListTreatment: eventListTreatmentSchema.optional(),
18732
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
18733
- }).strict();
18734
- styleAuthoritySchema = z27.discriminatedUnion("kind", [
18735
- z27.object({
18736
- kind: z27.literal("theme-v2"),
18737
- source: designResolutionPolicySchema,
18738
- siteStyleId: z27.string().min(1).transform(asSiteStyleId),
18739
- templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
18740
- templateVersion: z27.number().int().nonnegative(),
18741
- resolverVersion: z27.number().int().nonnegative()
18742
- }).strict(),
18743
- z27.object({
18744
- kind: z27.literal("legacy-raw"),
18745
- reason: z27.enum(["pre-theme-v2", "manual-runtime-fields"])
18746
- }).strict(),
18747
- z27.object({
18748
- kind: z27.literal("advanced-detached"),
18749
- reason: z27.literal("detached-custom-runtime-fields")
18750
- }).strict()
18751
- ]);
18752
- blockRuntimeStyleAuthoritySchema = z27.object({
18753
- unit: z27.literal("block-runtime-fields"),
18754
- blockId: z27.string().min(1).transform(asDesignBlockId),
18755
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
18756
- authority: styleAuthoritySchema
18757
- }).strict();
18758
- persistedPageDesignStateV1Schema = z27.object({
18759
- schemaVersion: z27.literal(themeV2DesignStateSchemaVersion),
18760
- siteStyleId: z27.string().min(1).transform(asSiteStyleId),
18761
- templateId: z27.string().min(1).transform(asDesignSystemTemplateId),
18762
- templateVersion: z27.number().int().nonnegative(),
18763
- resolverVersion: z27.number().int().nonnegative(),
18764
- rhythmPresetId: z27.string().min(1),
18765
- blocks: z27.array(blockDesignPlanSchema),
18766
- styleAuthorities: z27.array(blockRuntimeStyleAuthoritySchema)
18767
- }).strict();
18768
- }
18769
- });
18770
-
18771
- // ../theme-core/src/site-styles/runtimeCompiler.ts
18772
- function defineDesignRuntimeRules(rules) {
18773
- return rules;
18774
- }
18775
- function defineComponentRuntimeRules(rules) {
18776
- return rules;
18777
- }
18778
- function uniformSectionForeground(token) {
18779
- return {
18780
- textColor: token,
18781
- headingColor: token,
18782
- linkColor: token,
18783
- supportingColor: token
18784
- };
18785
- }
18786
- var defaultDesignRuntimeRules, defaultComponentRuntimeRules;
18787
- var init_runtimeCompiler = __esm({
18788
- "../theme-core/src/site-styles/runtimeCompiler.ts"() {
18789
- "use strict";
18790
- init_schema3();
18791
- init_modern_minimal();
18792
- init_expandPalette();
18793
- init_personalities();
18794
- init_variants();
18795
- init_designState();
18796
- init_types2();
18797
- init_accessibleSurfaces();
18798
- defaultDesignRuntimeRules = defineDesignRuntimeRules({
18799
- sectionSurfaces: {
18800
- base: {},
18801
- "muted-band": {
18802
- background: {
18803
- type: "color",
18804
- color: "muted"
18805
- }
18806
- },
18807
- "accent-band": {
18808
- background: {
18809
- type: "color",
18810
- color: "primary"
18811
- }
18812
- },
18813
- "brand-depth-band": {
18814
- background: {
18815
- type: "color",
18816
- color: "primary-800"
18817
- }
18818
- },
18819
- "hero-image": {
18820
- background: {
18821
- type: "image",
18822
- opacity: 1,
18823
- position: "center center",
18824
- ...uniformSectionForeground("text")
18825
- }
18826
- }
18827
- },
18828
- heroLegibility: {
18829
- "scrim-gradient": {
18830
- type: "gradient",
18831
- gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
18832
- opacity: 1
18833
- },
18834
- "solid-panel": {
18835
- type: "color",
18836
- color: "surface",
18837
- opacity: 0.88
18838
- }
18839
- },
18840
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
18841
- });
18842
- defaultComponentRuntimeRules = defineComponentRuntimeRules({
18843
- panelFrames: {
18844
- inset: {
18845
- spacing: "comfortable",
18846
- rounded: "xl",
18847
- raised: false,
18848
- background: {
18849
- type: "color",
18850
- color: "surfaceAlt",
18851
- textColor: "text"
18852
- }
18853
- },
18854
- raised: {
18855
- spacing: "comfortable",
18856
- rounded: "xl",
18857
- raised: true,
18858
- background: {
18859
- type: "color",
18860
- color: "surfaceAlt",
18861
- textColor: "text"
18862
- }
18863
- },
18864
- editorial: {
18865
- spacing: "medium",
18866
- rounded: "xl",
18867
- raised: false,
18868
- background: {
18869
- type: "color",
18870
- color: "surface",
18871
- textColor: "text"
18872
- }
18873
- }
18874
- },
18875
- flushFrames: {
18876
- "media-panel": {
18877
- fullWidth: true,
18878
- spacing: "none",
18879
- rounded: "none",
18880
- raised: false
18881
- }
18882
- },
18883
- itemSurfaces: {
18884
- none: null,
18885
- default: {
18886
- spacing: "medium",
18887
- rounded: "lg",
18888
- raised: false
18889
- },
18890
- flat: {
18891
- spacing: "medium",
18892
- rounded: "lg",
18893
- raised: false
18894
- },
18895
- outlined: {
18896
- spacing: "medium",
18897
- rounded: "lg",
18898
- raised: false,
18899
- border: {
18900
- enabled: true,
18901
- width: "1",
18902
- colorToken: "border"
18903
- }
18904
- },
18905
- raised: {
18906
- spacing: "medium",
18907
- rounded: "xl",
18908
- raised: true
18909
- },
18910
- inset: {
18911
- treatment: "soft-panel",
18912
- spacing: "comfortable",
18913
- rounded: "xl",
18914
- raised: false,
18915
- border: {
18916
- enabled: false
18917
- },
18918
- background: {
18919
- type: "color",
18920
- color: "surfaceAlt",
18921
- textColor: "text"
18922
- }
18923
- },
18924
- editorial: {
18925
- // Boxless open column with a short rule on top; the visual treatment
18926
- // lives in blocks-static/card-treatments.css.
18927
- treatment: "editorial-rule",
18928
- spacing: "none",
18929
- rounded: "none",
18930
- raised: false,
18931
- border: {
18932
- enabled: false
18933
- }
18934
- },
18935
- "color-blocked": {
18936
- // Bold, flat colour-blocked cards. The per-card background colour cycle
18937
- // (by position) and staggered offset live in
18938
- // blocks-static/card-treatments.css; here we set the shared shape:
18939
- // generous padding, large radius, no border, flat (no shadow).
18940
- treatment: "color-blocked",
18941
- spacing: "spacious",
18942
- rounded: "2xl",
18943
- raised: false,
18944
- border: {
18945
- enabled: false
18946
- }
18947
- }
18948
- }
18949
- });
18950
- }
18951
- });
18952
-
18953
19678
  // ../theme-core/src/site-styles/siteStyleThemeCompiler.ts
18954
19679
  var init_siteStyleThemeCompiler = __esm({
18955
19680
  "../theme-core/src/site-styles/siteStyleThemeCompiler.ts"() {
@@ -19141,6 +19866,7 @@ var init_generatedDesignPipeline = __esm({
19141
19866
  init_designState();
19142
19867
  init_generatedSchemas();
19143
19868
  init_siteStyleBlockPolicies();
19869
+ init_curatedSiteStyles();
19144
19870
  init_lookResolution();
19145
19871
  init_headerOpeningSection();
19146
19872
  init_resolver2();
@@ -19967,6 +20693,37 @@ var init_boxStyles = __esm({
19967
20693
  }
19968
20694
  });
19969
20695
 
20696
+ // ../blocks/src/system/fields/imageShape.ts
20697
+ function createImageShapeField(options = {}) {
20698
+ return {
20699
+ id: options.id ?? "imageShape",
20700
+ type: "select",
20701
+ label: options.label ?? "Image shape",
20702
+ ...options.description ? { description: options.description } : {},
20703
+ required: false,
20704
+ defaultValue: options.defaultValue ?? "default",
20705
+ multiple: false,
20706
+ options: [...standardImageShapeOptions],
20707
+ ui: {
20708
+ intent: options.uiIntent ?? "display",
20709
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
20710
+ }
20711
+ };
20712
+ }
20713
+ var standardImageShapeOptions;
20714
+ var init_imageShape = __esm({
20715
+ "../blocks/src/system/fields/imageShape.ts"() {
20716
+ "use strict";
20717
+ standardImageShapeOptions = [
20718
+ { value: "default", label: "Default" },
20719
+ { value: "square", label: "Square corners" },
20720
+ { value: "rounded", label: "Rounded corners" },
20721
+ { value: "circle", label: "Circle" },
20722
+ { value: "arch", label: "Arch" }
20723
+ ];
20724
+ }
20725
+ });
20726
+
19970
20727
  // ../blocks/src/utils/env.ts
19971
20728
  function isDevEnvironment() {
19972
20729
  try {
@@ -20888,7 +21645,7 @@ function buildFooterNavAll(common) {
20888
21645
  return stack(
20889
21646
  { className: common.className, gap: common.gap, align: "stretch" },
20890
21647
  [item],
20891
- when(collectionPath)
21648
+ whenCollectionHasItems(collectionPath)
20892
21649
  );
20893
21650
  }
20894
21651
  function buildFooterNavLinksOnly(common) {
@@ -20921,7 +21678,7 @@ function buildFooterNavLinksOnly(common) {
20921
21678
  return stack(
20922
21679
  { className: common.className, gap: common.gap, align: "stretch" },
20923
21680
  [item],
20924
- when(collectionPath)
21681
+ whenCollectionHasItems(collectionPath)
20925
21682
  );
20926
21683
  }
20927
21684
  function buildFooterNavFlatten(common) {
@@ -20970,7 +21727,7 @@ function buildFooterNavFlatten(common) {
20970
21727
  return stack(
20971
21728
  { className: common.className, gap: common.gap, align: "stretch" },
20972
21729
  [item],
20973
- when(collectionPath)
21730
+ whenCollectionHasItems(collectionPath)
20974
21731
  );
20975
21732
  }
20976
21733
  function footerNav(opts) {
@@ -20992,10 +21749,22 @@ function footerNav(opts) {
20992
21749
  if (mode === "flatten") return buildFooterNavFlatten(common);
20993
21750
  return buildFooterNavAll(common);
20994
21751
  }
21752
+ var whenCollectionHasItems;
20995
21753
  var init_footerNav = __esm({
20996
21754
  "../blocks/src/system/node/fragments/footerNav.ts"() {
20997
21755
  "use strict";
20998
21756
  init_builder2();
21757
+ whenCollectionHasItems = (collectionPath) => (node) => ({
21758
+ ...node,
21759
+ $when: {
21760
+ when: {
21761
+ from: collectionPath,
21762
+ transforms: [{ id: "array.length" }]
21763
+ },
21764
+ equals: 0,
21765
+ not: true
21766
+ }
21767
+ });
20999
21768
  }
21000
21769
  });
21001
21770
 
@@ -23942,8 +24711,23 @@ var init_heroLayoutControls = __esm({
23942
24711
  heroLayoutControlsFragment = defineFragment({
23943
24712
  id: "heroLayoutControls",
23944
24713
  title: "Hero Layout",
23945
- description: "Alignment and content width controls for hero layouts.",
24714
+ description: "Title scale, alignment, and content width controls for hero layouts.",
23946
24715
  fields: [
24716
+ {
24717
+ id: "titleSize",
24718
+ type: "select",
24719
+ label: "Title size",
24720
+ description: "Adjust the visual scale of the hero title.",
24721
+ required: false,
24722
+ ui: { intent: "display" },
24723
+ options: [
24724
+ { value: "auto", label: "Auto" },
24725
+ { value: "quiet", label: "Normal" },
24726
+ { value: "editorial", label: "Large" },
24727
+ { value: "display", label: "Huge" },
24728
+ { value: "poster", label: "Poster" }
24729
+ ]
24730
+ },
23947
24731
  {
23948
24732
  id: "contentAlignment",
23949
24733
  type: "select",
@@ -25059,7 +25843,18 @@ function heroSplitImagePane() {
25059
25843
  return stack(
25060
25844
  {
25061
25845
  gap: "none",
25062
- className: "rb-relative rb-overflow-hidden rb-rounded-3xl",
25846
+ className: {
25847
+ $bind: {
25848
+ from: "content.imageShape",
25849
+ transforms: [
25850
+ {
25851
+ id: "ui.imageShapeClassName",
25852
+ options: { baseClass: "rb-relative rb-overflow-hidden rb-rounded-3xl" }
25853
+ }
25854
+ ],
25855
+ fallback: "rb-relative rb-overflow-hidden rb-rounded-3xl"
25856
+ }
25857
+ },
25063
25858
  style: {
25064
25859
  minHeight: "clamp(18rem, 36vw, 34rem)"
25065
25860
  }
@@ -25113,6 +25908,7 @@ var init_hero = __esm({
25113
25908
  "../blocks/src/system/blocks/hero.ts"() {
25114
25909
  "use strict";
25115
25910
  init_boxStyles();
25911
+ init_imageShape();
25116
25912
  init_fragments();
25117
25913
  init_styledSection();
25118
25914
  init_defineBlock();
@@ -25196,6 +25992,12 @@ var init_hero = __esm({
25196
25992
  label: "Content card",
25197
25993
  renderInHeader: true,
25198
25994
  intent: "style"
25995
+ }),
25996
+ createImageShapeField({
25997
+ id: "imageShape",
25998
+ label: "Image shape",
25999
+ defaultValue: "default",
26000
+ uiIntent: "display"
25199
26001
  })
25200
26002
  ],
25201
26003
  layout: classicLayout,
@@ -25210,6 +26012,15 @@ var init_hero = __esm({
25210
26012
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
25211
26013
  tags: ["header", "banner", "landing", "introduction", "welcome", "splash", "headline"],
25212
26014
  icon: "Sparkles",
26015
+ previewCustomize: {
26016
+ quickFieldPriority: [
26017
+ "titleSize",
26018
+ "contentAlignment",
26019
+ "contentMaxWidth",
26020
+ "verticalAlignment",
26021
+ "imageShape"
26022
+ ]
26023
+ },
25213
26024
  styleTokens: {
25214
26025
  typography: "display",
25215
26026
  spacing: "xl"
@@ -25248,7 +26059,8 @@ var init_aspectRatio = __esm({
25248
26059
  { value: "16/9", label: "16:9 (Landscape)" },
25249
26060
  { value: "4/3", label: "4:3 (Standard)" },
25250
26061
  { value: "1/1", label: "1:1 (Square)" },
25251
- { value: "3/4", label: "3:4 (Portrait)" }
26062
+ { value: "3/4", label: "3:4 (Portrait)" },
26063
+ { value: "9/16", label: "9:16 (Tall portrait)" }
25252
26064
  ];
25253
26065
  }
25254
26066
  });
@@ -26555,6 +27367,270 @@ var init_form = __esm({
26555
27367
  }
26556
27368
  });
26557
27369
 
27370
+ // ../blocks/src/system/blocks/contact-newsletter.ts
27371
+ var contactNewsletterLayout, contactNewsletterManifest, contactNewsletterBlockDefinition;
27372
+ var init_contact_newsletter = __esm({
27373
+ "../blocks/src/system/blocks/contact-newsletter.ts"() {
27374
+ "use strict";
27375
+ init_fragments();
27376
+ init_styledSection();
27377
+ init_builder2();
27378
+ init_defineBlock();
27379
+ init_api_bindings();
27380
+ init_form();
27381
+ contactNewsletterLayout = styledSection({
27382
+ children: sectionContainer([
27383
+ el(
27384
+ "div",
27385
+ { className: "contact-newsletter-grid" },
27386
+ [
27387
+ el(
27388
+ "div",
27389
+ { className: "contact-newsletter-column contact-newsletter-contact" },
27390
+ [
27391
+ el(
27392
+ "div",
27393
+ { className: "contact-newsletter-copy" },
27394
+ [
27395
+ text(
27396
+ {
27397
+ as: "h2",
27398
+ className: "form-copy-title"
27399
+ },
27400
+ when("contactTitle"),
27401
+ bind("contactTitle")
27402
+ ),
27403
+ richText(
27404
+ {
27405
+ className: "form-copy-intro rb-prose rb-max-w-none"
27406
+ },
27407
+ when("contactIntro"),
27408
+ bind("contactIntro")
27409
+ )
27410
+ ]
27411
+ ),
27412
+ el(
27413
+ "form",
27414
+ withApiBindings({
27415
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } },
27416
+ submitLabel: { $bind: { from: "contactSubmitLabel" } },
27417
+ successMessage: { $bind: { from: "contactSuccessMessage" } }
27418
+ }),
27419
+ [],
27420
+ bind("data.form")
27421
+ )
27422
+ ]
27423
+ ),
27424
+ el(
27425
+ "div",
27426
+ { className: "contact-newsletter-column contact-newsletter-info contact-newsletter-newsletter" },
27427
+ [
27428
+ el(
27429
+ "div",
27430
+ { className: "contact-newsletter-copy" },
27431
+ [
27432
+ text(
27433
+ {
27434
+ as: "h2",
27435
+ className: "newsletter-copy-title"
27436
+ },
27437
+ when("newsletterTitle"),
27438
+ bind("newsletterTitle")
27439
+ ),
27440
+ richText(
27441
+ {
27442
+ className: "newsletter-copy-subtitle rb-prose rb-max-w-none"
27443
+ },
27444
+ when("newsletterSubtitle"),
27445
+ bind("newsletterSubtitle")
27446
+ )
27447
+ ]
27448
+ ),
27449
+ el(
27450
+ "newsletter-form",
27451
+ withApiBindings({
27452
+ listId: { $bind: { from: "listId" } },
27453
+ preset: { $bind: { from: "preset" } },
27454
+ includePhone: { $bind: { from: "includePhone" } },
27455
+ buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
27456
+ successMessage: { $bind: { from: "newsletterSuccessMessage" } },
27457
+ privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
27458
+ tags: { $bind: { from: "newsletterTags" } },
27459
+ spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
27460
+ }),
27461
+ []
27462
+ )
27463
+ ]
27464
+ )
27465
+ ]
27466
+ )
27467
+ ], {
27468
+ className: "contact-newsletter-container"
27469
+ }),
27470
+ baseClass: "",
27471
+ spacing: "medium",
27472
+ background: "surface"
27473
+ });
27474
+ contactNewsletterManifest = createBlockManifest({
27475
+ id: "block.contact-newsletter",
27476
+ title: "Contact + Newsletter",
27477
+ titleSource: "contactTitle",
27478
+ description: "Two-column newsletter signup and contact form section.",
27479
+ category: "interactive",
27480
+ layout: contactNewsletterLayout,
27481
+ defaultVariant: "default",
27482
+ variants: {
27483
+ default: contactNewsletterLayout
27484
+ },
27485
+ variantOptions: {
27486
+ default: {
27487
+ label: "Two column",
27488
+ description: "Newsletter and contact form side by side.",
27489
+ icon: "Columns2"
27490
+ }
27491
+ },
27492
+ additionalFields: [
27493
+ {
27494
+ id: "newsletterTitle",
27495
+ type: "text",
27496
+ label: "Newsletter title",
27497
+ defaultValue: "Stay connected"
27498
+ },
27499
+ {
27500
+ id: "newsletterSubtitle",
27501
+ type: "richText",
27502
+ label: "Newsletter intro"
27503
+ },
27504
+ {
27505
+ id: "listId",
27506
+ type: "reference",
27507
+ label: "Newsletter list",
27508
+ description: "Select the list new subscribers should be added to.",
27509
+ required: true,
27510
+ referenceKind: "newsletterList",
27511
+ allowManualEntry: false,
27512
+ ui: { intent: "behavior" }
27513
+ },
27514
+ {
27515
+ id: "preset",
27516
+ type: "select",
27517
+ label: "Newsletter fields",
27518
+ defaultValue: "emailOnly",
27519
+ ui: { intent: "display" },
27520
+ options: [
27521
+ { value: "emailOnly", label: "Email only" },
27522
+ { value: "emailName", label: "Email + Name" },
27523
+ { value: "emailFirstLast", label: "Email + First/Last Name" },
27524
+ { value: "emailNameCompany", label: "Email + Name + Company (B2B)" }
27525
+ ]
27526
+ },
27527
+ {
27528
+ id: "includePhone",
27529
+ type: "boolean",
27530
+ label: "Include phone field",
27531
+ defaultValue: false,
27532
+ ui: { intent: "display" }
27533
+ },
27534
+ {
27535
+ id: "newsletterButtonLabel",
27536
+ type: "text",
27537
+ label: "Newsletter button label",
27538
+ defaultValue: "Subscribe",
27539
+ ui: { intent: "display" }
27540
+ },
27541
+ {
27542
+ id: "newsletterSuccessMessage",
27543
+ type: "text",
27544
+ label: "Newsletter success message",
27545
+ defaultValue: "Thanks for subscribing!",
27546
+ ui: { intent: "behavior" }
27547
+ },
27548
+ {
27549
+ id: "newsletterPrivacyNote",
27550
+ type: "text",
27551
+ label: "Privacy note",
27552
+ ui: { intent: "display" }
27553
+ },
27554
+ {
27555
+ id: "newsletterTags",
27556
+ type: "text",
27557
+ label: "Newsletter tags",
27558
+ description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
27559
+ ui: { intent: "behavior" }
27560
+ },
27561
+ {
27562
+ id: "contactTitle",
27563
+ type: "text",
27564
+ label: "Contact title",
27565
+ defaultValue: "Get in touch"
27566
+ },
27567
+ {
27568
+ id: "contactIntro",
27569
+ type: "richText",
27570
+ label: "Contact intro"
27571
+ },
27572
+ {
27573
+ id: "formSlug",
27574
+ type: "reference",
27575
+ label: "Contact form",
27576
+ description: "Pick a saved form to render.",
27577
+ required: true,
27578
+ referenceKind: "form",
27579
+ allowManualEntry: false,
27580
+ ui: { intent: "behavior" }
27581
+ },
27582
+ {
27583
+ id: "contactSubmitLabel",
27584
+ type: "text",
27585
+ label: "Contact button label",
27586
+ defaultValue: "Send message",
27587
+ ui: { intent: "display" }
27588
+ },
27589
+ {
27590
+ id: "contactSuccessMessage",
27591
+ type: "text",
27592
+ label: "Contact success message",
27593
+ defaultValue: "Thanks - we received your message.",
27594
+ ui: { intent: "behavior" }
27595
+ }
27596
+ ],
27597
+ styleTokens: {
27598
+ background: "surface",
27599
+ typography: "body",
27600
+ spacing: "md"
27601
+ },
27602
+ behaviours: {
27603
+ supportsThemeSwitching: true,
27604
+ inlineEditing: true,
27605
+ animation: false,
27606
+ paletteHidden: false
27607
+ },
27608
+ tags: [
27609
+ "contact",
27610
+ "newsletter",
27611
+ "signup",
27612
+ "email",
27613
+ "form",
27614
+ "lead-capture"
27615
+ ],
27616
+ icon: "MailPlus"
27617
+ });
27618
+ contactNewsletterBlockDefinition = {
27619
+ manifest: contactNewsletterManifest,
27620
+ dataSchemas: { form: formDataSchema.optional() },
27621
+ dataLoaders: {
27622
+ form: {
27623
+ endpoint: "getPublicFormById",
27624
+ params: {
27625
+ formSlug: { $bind: { from: "formSlug" } }
27626
+ },
27627
+ mode: "server"
27628
+ }
27629
+ }
27630
+ };
27631
+ }
27632
+ });
27633
+
26558
27634
  // ../blocks/src/system/blocks/faq.ts
26559
27635
  function fragmentLayoutNode2(layout) {
26560
27636
  return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
@@ -26883,6 +27959,10 @@ function resolveHeroContentMaxWidth(content) {
26883
27959
  return "default";
26884
27960
  }
26885
27961
  function resolveHeroTypographyScale(content) {
27962
+ const titleSize = readString(content, "titleSize");
27963
+ if (titleSize === "quiet" || titleSize === "editorial" || titleSize === "display" || titleSize === "poster") {
27964
+ return titleSize;
27965
+ }
26886
27966
  const raw = readHeroLayoutString(
26887
27967
  content,
26888
27968
  "typographyScale",
@@ -26900,7 +27980,7 @@ function resolveHeroTitleLength(content) {
26900
27980
  if (headline.length > heroTitleLengthThresholds.medium.maxCharacters || wordCount > heroTitleLengthThresholds.medium.maxWords) return "medium";
26901
27981
  return "short";
26902
27982
  }
26903
- var joinClasses3, eyebrowTreatmentClassMap, eyebrowTreatmentSet, headingDecorationFamilySet, headingDecorationColorTokenSet, imageGalleryCornerClassMap, parseRatio, ratioToHeightFactor, headerNavClassOptionsSchema, headerNavLinkClassTransform, headingClassFromAlignment, bodyClassFromAlignment, stackAlignFromAlignment, sectionStateToneTransform, heroTitleLengthThresholds, heroContentWrapperClassSchema, heroContentWrapperClassTransform, heroCtaJustifyTransform, heroStackJustifyFromVerticalAlignmentTransform, heroGridClassFromVerticalAlignmentSchema, heroGridClassFromVerticalAlignmentTransform, imageFragmentClassOptionsSchema, imageFragmentClassTransform, imageFragmentSizeOptionsSchema, imageFragmentSizeTransform, conditionalClassOptionsSchema, conditionalClassTransform, twoColumnContainerClassOptionsSchema, twoColumnContainerClassTransform, twoColumnFlexBasisOptionsSchema, twoColumnFlexBasisTransform, columnsDesktopSpanClassOptionsSchema, columnsDesktopSpanClassTransform, resolveColumnsGridCols, columnsGridColsTransform, columnsColsAtTransform, ratioToHeightFactorTransform, uiTransforms;
27983
+ var joinClasses3, eyebrowTreatmentClassMap, eyebrowTreatmentSet, headingDecorationFamilySet, headingDecorationColorTokenSet, imageGalleryCornerClassMap, imageShapeClassMap, parseRatio, ratioToHeightFactor, headerNavClassOptionsSchema, headerNavLinkClassTransform, headingClassFromAlignment, bodyClassFromAlignment, stackAlignFromAlignment, sectionStateToneTransform, heroTitleLengthThresholds, heroContentWrapperClassSchema, heroContentWrapperClassTransform, heroCtaJustifyTransform, heroStackJustifyFromVerticalAlignmentTransform, heroGridClassFromVerticalAlignmentSchema, heroGridClassFromVerticalAlignmentTransform, imageFragmentClassOptionsSchema, imageFragmentClassTransform, imageFragmentSizeOptionsSchema, imageFragmentSizeTransform, conditionalClassOptionsSchema, conditionalClassTransform, twoColumnContainerClassOptionsSchema, twoColumnContainerClassTransform, twoColumnFlexBasisOptionsSchema, twoColumnFlexBasisTransform, columnsDesktopSpanClassOptionsSchema, columnsDesktopSpanClassTransform, resolveColumnsGridCols, columnsGridColsTransform, columnsColsAtTransform, ratioToHeightFactorTransform, uiTransforms;
26904
27984
  var init_ui = __esm({
26905
27985
  "../blocks/src/system/transforms/registry/ui.ts"() {
26906
27986
  "use strict";
@@ -26914,6 +27994,7 @@ var init_ui = __esm({
26914
27994
  ).join(" ").replace(/\s+/g, " ").trim();
26915
27995
  eyebrowTreatmentClassMap = {
26916
27996
  plain: "",
27997
+ accent: "rb-eyebrow-treatment-accent",
26917
27998
  pill: "rb-eyebrow-treatment-pill",
26918
27999
  "accent-pill": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent",
26919
28000
  "pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-pill-bounce",
@@ -26931,6 +28012,13 @@ var init_ui = __esm({
26931
28012
  "2xl": "rb-rounded-2xl",
26932
28013
  "3xl": "rb-rounded-3xl"
26933
28014
  };
28015
+ imageShapeClassMap = {
28016
+ default: "",
28017
+ square: "rb-media-shape-square",
28018
+ rounded: "rb-media-shape-rounded",
28019
+ circle: "rb-media-shape-circle",
28020
+ arch: "rb-media-shape-arch"
28021
+ };
26934
28022
  parseRatio = (raw) => {
26935
28023
  if (typeof raw !== "string") return null;
26936
28024
  const value = raw.trim();
@@ -27222,6 +28310,16 @@ var init_ui = __esm({
27222
28310
  heroGridClassFromVerticalAlignmentTransform,
27223
28311
  imageFragmentClassTransform,
27224
28312
  imageFragmentSizeTransform,
28313
+ {
28314
+ id: "ui.imageShapeClassName",
28315
+ kind: "string",
28316
+ summary: "Apply a constrained media shape class",
28317
+ run: (value, options) => {
28318
+ const baseClass = typeof options?.baseClass === "string" ? options.baseClass : "";
28319
+ const shape = typeof value === "string" ? value.trim() : "default";
28320
+ return joinClasses3([baseClass, imageShapeClassMap[shape] ?? ""]);
28321
+ }
28322
+ },
27225
28323
  conditionalClassTransform,
27226
28324
  twoColumnContainerClassTransform,
27227
28325
  twoColumnFlexBasisTransform,
@@ -28638,6 +29736,21 @@ var init_site_header = __esm({
28638
29736
  id: "block.site-header",
28639
29737
  title: "Site Header",
28640
29738
  category: "layout",
29739
+ additionalFields: [
29740
+ {
29741
+ id: "mode",
29742
+ type: "select",
29743
+ label: "Header display",
29744
+ required: false,
29745
+ multiple: false,
29746
+ defaultValue: "default",
29747
+ options: [
29748
+ { value: "default", label: "Show header" },
29749
+ { value: "hidden", label: "Hide header" }
29750
+ ],
29751
+ ui: { intent: "display" }
29752
+ }
29753
+ ],
28641
29754
  // Skip section styles - this block uses theme-based styling
28642
29755
  skipSectionStyles: true,
28643
29756
  // Block manages its own wrapper - enables sticky positioning
@@ -30127,6 +31240,7 @@ var init_media_text = __esm({
30127
31240
  init_aspectRatio();
30128
31241
  init_boxStyles();
30129
31242
  init_carousel();
31243
+ init_imageShape();
30130
31244
  init_imageLayout();
30131
31245
  mediaTextFrameCapability = defineFrameCapability([
30132
31246
  "plain",
@@ -30153,6 +31267,9 @@ var init_media_text = __esm({
30153
31267
  category: "layout",
30154
31268
  includeContainerStyles: true,
30155
31269
  titleSource: "title",
31270
+ previewCustomize: {
31271
+ quickFieldPriority: ["imagePosition", "ratio", "imageShape", "titleAlignment", "aspectRatio"]
31272
+ },
30156
31273
  additionalFields: [
30157
31274
  {
30158
31275
  id: "images",
@@ -30191,7 +31308,7 @@ var init_media_text = __esm({
30191
31308
  {
30192
31309
  id: "titleAlignment",
30193
31310
  type: "select",
30194
- label: "Title alignment",
31311
+ label: "Content alignment",
30195
31312
  required: false,
30196
31313
  defaultValue: "left",
30197
31314
  multiple: false,
@@ -30249,7 +31366,18 @@ var init_media_text = __esm({
30249
31366
  transition: "slide"
30250
31367
  },
30251
31368
  ui: { intent: "behavior" }
30252
- }),
31369
+ }).map((field) => ({
31370
+ ...field,
31371
+ ui: {
31372
+ ...field.ui ?? {},
31373
+ visibleWhen: field.id === "carouselAutoplayDelay" ? {
31374
+ allOf: [
31375
+ { field: "images", minItems: 2 },
31376
+ { field: "carouselAutoplay", equals: true }
31377
+ ]
31378
+ } : { field: "images", minItems: 2 }
31379
+ }
31380
+ })),
30253
31381
  createAspectRatioField({
30254
31382
  id: "aspectRatio",
30255
31383
  label: "Media aspect ratio",
@@ -30257,6 +31385,12 @@ var init_media_text = __esm({
30257
31385
  defaultValue: "auto",
30258
31386
  visibleWhen: { field: "images", notEquals: null }
30259
31387
  }),
31388
+ createImageShapeField({
31389
+ id: "imageShape",
31390
+ label: "Media shape",
31391
+ defaultValue: "default",
31392
+ visibleWhen: { field: "images", notEquals: null }
31393
+ }),
30260
31394
  {
30261
31395
  id: "text",
30262
31396
  type: "richText",
@@ -30290,6 +31424,30 @@ var init_media_text = __esm({
30290
31424
  ...options?.not ? { not: true } : {}
30291
31425
  }
30292
31426
  });
31427
+ const bodyClassNameFromAlignment = {
31428
+ $bind: {
31429
+ from: "content.titleAlignment",
31430
+ transforms: [
31431
+ {
31432
+ id: "ui.bodyClassFromAlignment",
31433
+ options: { base: "rb-prose rb-max-w-none" }
31434
+ }
31435
+ ],
31436
+ fallback: "rb-prose rb-max-w-none"
31437
+ }
31438
+ };
31439
+ const titleClassNameFromAlignment = {
31440
+ $bind: {
31441
+ from: "content.titleAlignment",
31442
+ transforms: [
31443
+ {
31444
+ id: "ui.headingClassFromAlignment",
31445
+ options: { base: "" }
31446
+ }
31447
+ ],
31448
+ fallback: ""
31449
+ }
31450
+ };
30293
31451
  const defaultTextColumn = el("div", {}, [
30294
31452
  styledCard(
30295
31453
  [
@@ -30314,8 +31472,55 @@ var init_media_text = __esm({
30314
31472
  bind("content.text")
30315
31473
  )
30316
31474
  ]);
31475
+ const bioTextColumn = el(
31476
+ "div",
31477
+ { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" },
31478
+ [
31479
+ text(
31480
+ {
31481
+ as: "h2",
31482
+ className: titleClassNameFromAlignment
31483
+ },
31484
+ when("content.title"),
31485
+ bind("content.title")
31486
+ ),
31487
+ styledCard(
31488
+ [
31489
+ richText(
31490
+ {
31491
+ className: bodyClassNameFromAlignment
31492
+ },
31493
+ bind("content.text")
31494
+ )
31495
+ ],
31496
+ {
31497
+ stylesFrom: "content._textCardStyles",
31498
+ backgroundFrom: "content._textCardStyles.background"
31499
+ },
31500
+ when("content.wrapTextInCard")
31501
+ ),
31502
+ richText(
31503
+ {
31504
+ className: bodyClassNameFromAlignment
31505
+ },
31506
+ when("content.wrapTextInCard", { not: true }),
31507
+ bind("content.text")
31508
+ )
31509
+ ]
31510
+ );
30317
31511
  const defaultImageCommonProps = {
30318
- className: "rb-w-full rb-h-auto rb-object-cover",
31512
+ className: {
31513
+ $bind: {
31514
+ from: "content.imageShape",
31515
+ transforms: [
31516
+ {
31517
+ id: "ui.imageShapeClassName",
31518
+ options: { baseClass: "rb-w-full rb-h-auto rb-object-cover" }
31519
+ }
31520
+ ],
31521
+ fallback: "rb-w-full rb-h-auto rb-object-cover"
31522
+ }
31523
+ },
30319
31524
  style: {
30320
31525
  aspectRatio: { $bind: { from: "content.aspectRatio" } }
30321
31526
  }
@@ -30356,6 +31561,27 @@ var init_media_text = __esm({
30356
31561
  ],
30357
31562
  whenImagesLength(0, { not: true })
30358
31563
  );
31564
+ const bioImagesLayout = el(
31565
+ "div",
31566
+ {},
31567
+ [
31568
+ responsiveTwoColumn({
31569
+ image: el("div", {}, [
31570
+ el("div", {}, [defaultSingleImage], whenImagesLength(1)),
31571
+ el("div", {}, [defaultCarouselImages], whenImagesLength(1, { not: true }))
31572
+ ]),
31573
+ text: bioTextColumn,
31574
+ ratioFrom: "content.ratio",
31575
+ imagePositionFrom: "content.imagePosition",
31576
+ containerClassName: "rb-flex rb-flex-col rb-md-flex-row rb-md-items-center",
31577
+ gapFrom: "content.gap",
31578
+ gapFallback: "comfortable",
31579
+ imageWrapperClassName: "rb-w-full rb-shrink-0",
31580
+ textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
31581
+ })
31582
+ ],
31583
+ whenImagesLength(0, { not: true })
31584
+ );
30359
31585
  const defaultTextOnlyLayout = el(
30360
31586
  "div",
30361
31587
  {},
@@ -30385,7 +31611,45 @@ var init_media_text = __esm({
30385
31611
  ],
30386
31612
  whenImagesLength(0)
30387
31613
  );
31614
+ const bioTextOnlyLayout = el(
31615
+ "div",
31616
+ { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" },
31617
+ [
31618
+ text(
31619
+ {
31620
+ as: "h2",
31621
+ className: titleClassNameFromAlignment
31622
+ },
31623
+ when("content.title"),
31624
+ bind("content.title")
31625
+ ),
31626
+ styledCard(
31627
+ [
31628
+ richText(
31629
+ {
31630
+ className: bodyClassNameFromAlignment
31631
+ },
31632
+ bind("content.text")
31633
+ )
31634
+ ],
31635
+ {
31636
+ stylesFrom: "content._textCardStyles",
31637
+ backgroundFrom: "content._textCardStyles.background"
31638
+ },
31639
+ when("content.wrapTextInCard")
31640
+ ),
31641
+ richText(
31642
+ {
31643
+ className: bodyClassNameFromAlignment
31644
+ },
31645
+ when("content.wrapTextInCard", { not: true }),
31646
+ bind("content.text")
31647
+ )
31648
+ ],
31649
+ whenImagesLength(0)
31650
+ );
30388
31651
  const defaultInner = el("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
31652
+ const bioInner = el("div", {}, [bioImagesLayout, bioTextOnlyLayout]);
30389
31653
  const defaultLayout2 = styledSection({
30390
31654
  children: styledContainer({
30391
31655
  rootType: "stack",
@@ -30394,18 +31658,7 @@ var init_media_text = __esm({
30394
31658
  text(
30395
31659
  {
30396
31660
  as: "h2",
30397
- className: {
30398
- $bind: {
30399
- from: "content.titleAlignment",
30400
- transforms: [
30401
- {
30402
- id: "ui.headingClassFromAlignment",
30403
- options: { base: "" }
30404
- }
30405
- ],
30406
- fallback: ""
30407
- }
30408
- }
31661
+ className: titleClassNameFromAlignment
30409
31662
  },
30410
31663
  when("content.title"),
30411
31664
  bind("content.title")
@@ -30417,14 +31670,28 @@ var init_media_text = __esm({
30417
31670
  baseClass: "",
30418
31671
  spacing: "medium"
30419
31672
  });
31673
+ const bioLayout = styledSection({
31674
+ children: styledContainer({
31675
+ rootType: "stack",
31676
+ rootProps: { gap: "lg" },
31677
+ children: [bioInner]
31678
+ }),
31679
+ baseClass: "",
31680
+ spacing: "medium"
31681
+ });
30420
31682
  return {
30421
31683
  layout: defaultLayout2,
30422
31684
  variants: {
30423
- default: defaultLayout2
31685
+ default: defaultLayout2,
31686
+ bio: bioLayout
30424
31687
  },
30425
31688
  defaultVariant: "default",
30426
31689
  variantOptions: {
30427
- default: { label: "Default" }
31690
+ default: { label: "Default" },
31691
+ bio: {
31692
+ label: "Bio",
31693
+ description: "Vertically centered title and copy beside media."
31694
+ }
30428
31695
  }
30429
31696
  };
30430
31697
  })(),
@@ -31216,10 +32483,15 @@ function isEventCalendarDisplayMode(value) {
31216
32483
  function isEventCalendarListLayout(value) {
31217
32484
  return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
31218
32485
  }
31219
- var eventCalendarDisplayModeValues, eventCalendarListLayoutValues, eventCalendarListLayoutOptions;
32486
+ function isEventContentType(slug) {
32487
+ if (!slug) return false;
32488
+ return EVENT_CONTENT_TYPE_SLUGS.includes(slug);
32489
+ }
32490
+ var EVENT_CONTENT_TYPE_SLUGS, eventCalendarDisplayModeValues, eventCalendarListLayoutValues, eventCalendarListLayoutOptions;
31220
32491
  var init_events = __esm({
31221
32492
  "../blocks/src/system/constants/events.ts"() {
31222
32493
  "use strict";
32494
+ EVENT_CONTENT_TYPE_SLUGS = ["event", "events"];
31223
32495
  eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
31224
32496
  eventCalendarListLayoutValues = ["stack", "grid", "compact"];
31225
32497
  eventCalendarListLayoutOptions = [
@@ -31230,6 +32502,132 @@ var init_events = __esm({
31230
32502
  }
31231
32503
  });
31232
32504
 
32505
+ // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
32506
+ function resolveRuntimeEventPricing(event) {
32507
+ if (isPublicEventPricing(event.pricing)) {
32508
+ return event.pricing;
32509
+ }
32510
+ const legacy = event;
32511
+ const currency = readCurrency(legacy.currency);
32512
+ if (event.requiresRegistration === false) {
32513
+ return {
32514
+ kind: "drop_in",
32515
+ currency,
32516
+ display: { kind: "free", currency }
32517
+ };
32518
+ }
32519
+ if (legacy.pricingMode === "ticket_types") {
32520
+ const ticketTypes = Array.isArray(legacy.ticketTypes) ? legacy.ticketTypes.filter(isPublicEventTicketType) : [];
32521
+ return {
32522
+ kind: "ticket_types",
32523
+ currency,
32524
+ ticketTypes,
32525
+ display: readTicketTypePriceDisplay(legacy.priceDisplay, currency)
32526
+ };
32527
+ }
32528
+ const amount = typeof legacy.price === "number" ? legacy.price : 0;
32529
+ if (legacy.pricingType === "paid" && amount > 0) {
32530
+ return {
32531
+ kind: "single_paid",
32532
+ amount,
32533
+ currency,
32534
+ display: { kind: "exact", amount, currency }
32535
+ };
32536
+ }
32537
+ return {
32538
+ kind: "free_registration",
32539
+ currency,
32540
+ display: { kind: "free", currency }
32541
+ };
32542
+ }
32543
+ function readCurrency(value) {
32544
+ return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
32545
+ }
32546
+ function isRecord3(value) {
32547
+ return typeof value === "object" && value !== null && !Array.isArray(value);
32548
+ }
32549
+ function isPublicEventPricing(value) {
32550
+ if (!isRecord3(value) || typeof value.kind !== "string") return false;
32551
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
32552
+ }
32553
+ function isPublicEventTicketType(value) {
32554
+ return isRecord3(value) && typeof value.id === "string";
32555
+ }
32556
+ function readTicketTypePriceDisplay(value, currency) {
32557
+ const display = readLegacyPriceDisplay(value, currency);
32558
+ return display.kind === "course" ? { kind: "unavailable", currency } : display;
32559
+ }
32560
+ function readLegacyPriceDisplay(value, currency) {
32561
+ if (!isRecord3(value) || typeof value.kind !== "string") {
32562
+ return { kind: "unavailable", currency };
32563
+ }
32564
+ const displayCurrency = readCurrency(value.currency);
32565
+ switch (value.kind) {
32566
+ case "free":
32567
+ return { kind: "free", currency: displayCurrency };
32568
+ case "exact":
32569
+ return readAmount(value.amount) !== null ? {
32570
+ kind: "exact",
32571
+ amount: readAmount(value.amount) ?? 0,
32572
+ currency: displayCurrency
32573
+ } : { kind: "unavailable", currency };
32574
+ case "from":
32575
+ return readAmount(value.amount) !== null ? {
32576
+ kind: "from",
32577
+ amount: readAmount(value.amount) ?? 0,
32578
+ currency: displayCurrency
32579
+ } : { kind: "unavailable", currency };
32580
+ case "mixed":
32581
+ return readAmount(value.paidFromAmount) !== null ? {
32582
+ kind: "mixed",
32583
+ paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
32584
+ currency: displayCurrency
32585
+ } : { kind: "unavailable", currency };
32586
+ case "unavailable":
32587
+ return { kind: "unavailable", currency: displayCurrency };
32588
+ case "course":
32589
+ return isRecord3(value.display) ? {
32590
+ kind: "course",
32591
+ display: readCoursePriceDisplay(value.display, displayCurrency)
32592
+ } : {
32593
+ kind: "course",
32594
+ display: { kind: "unavailable", currency: displayCurrency }
32595
+ };
32596
+ default:
32597
+ return { kind: "unavailable", currency };
32598
+ }
32599
+ }
32600
+ function readCoursePriceDisplay(value, currency) {
32601
+ switch (value.kind) {
32602
+ case "free":
32603
+ return { kind: "free", currency: readCurrency(value.currency) };
32604
+ case "exact":
32605
+ return readAmount(value.amount) !== null ? {
32606
+ kind: "exact",
32607
+ amount: readAmount(value.amount) ?? 0,
32608
+ currency: readCurrency(value.currency)
32609
+ } : { kind: "unavailable", currency };
32610
+ case "from":
32611
+ return readAmount(value.amount) !== null ? {
32612
+ kind: "from",
32613
+ amount: readAmount(value.amount) ?? 0,
32614
+ currency: readCurrency(value.currency)
32615
+ } : { kind: "unavailable", currency };
32616
+ default:
32617
+ return { kind: "unavailable", currency };
32618
+ }
32619
+ }
32620
+ function readAmount(value) {
32621
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
32622
+ }
32623
+ var DEFAULT_EVENT_CURRENCY;
32624
+ var init_pricing = __esm({
32625
+ "../blocks/src/system/runtime/nodes/events/shared/pricing.ts"() {
32626
+ "use strict";
32627
+ DEFAULT_EVENT_CURRENCY = "USD";
32628
+ }
32629
+ });
32630
+
31233
32631
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
31234
32632
  import { z as z47 } from "zod";
31235
32633
  var previewStageSchema, registrationButtonVariantSchema, eventButtonVariantSchema, eventLayoutSchema, eventCalendarDisplayModeSchema, columnOptionSchema, weekStartSchema, filterAutoShowSchema, calendarTabViewsSchema;
@@ -31249,30 +32647,194 @@ var init_contract_schemas = __esm({
31249
32647
  }
31250
32648
  });
31251
32649
 
32650
+ // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
32651
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
32652
+ const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
32653
+ if (!needsPaymentStep) {
32654
+ return baseSteps;
32655
+ }
32656
+ return [...baseSteps, "select-payment"];
32657
+ }
32658
+ var init_wizardSteps = __esm({
32659
+ "../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts"() {
32660
+ "use strict";
32661
+ }
32662
+ });
32663
+
32664
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
32665
+ function eventMatchesOccurrenceId(event, occurrenceId) {
32666
+ return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
32667
+ }
32668
+ function findPreSelectedEvent(input) {
32669
+ const occurrenceContext = input.occurrenceContext;
32670
+ if (!occurrenceContext) {
32671
+ return null;
32672
+ }
32673
+ const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
32674
+ startsAt: occurrenceContext.startsAt,
32675
+ timeZone: occurrenceContext.timeZone
32676
+ }));
32677
+ return input.scopedEvents.find(
32678
+ (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
32679
+ startsAt: event.startsAt,
32680
+ timeZone: event.timeZone
32681
+ })) === contextDate
32682
+ ) ?? null;
32683
+ }
32684
+ function resolveEventRequiresPayment(input) {
32685
+ if (input.eligibility) {
32686
+ return input.eligibility.requiresPayment;
32687
+ }
32688
+ if (input.selectedTicketType) {
32689
+ return input.selectedTicketType.priceAmount > 0;
32690
+ }
32691
+ if (!input.event) {
32692
+ return false;
32693
+ }
32694
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
32695
+ }
32696
+ var init_registrationDerivations = __esm({
32697
+ "../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts"() {
32698
+ "use strict";
32699
+ init_src();
32700
+ init_pricing();
32701
+ }
32702
+ });
32703
+
32704
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
32705
+ function toRegistrationEvent(event) {
32706
+ return {
32707
+ ...event,
32708
+ pricing: resolveRuntimeEventPricing(event),
32709
+ publicEventId: event.id,
32710
+ registrationOccurrenceId: event.occurrenceId
32711
+ };
32712
+ }
32713
+ function toRegistrationEvents(events) {
32714
+ return events.map(toRegistrationEvent);
32715
+ }
32716
+ var init_registrationEventAdapter = __esm({
32717
+ "../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts"() {
32718
+ "use strict";
32719
+ init_pricing();
32720
+ }
32721
+ });
32722
+
31252
32723
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
31253
32724
  import { z as z48 } from "zod";
31254
32725
  function buildEventRegistrationDisplay(source) {
32726
+ const stepLabels = buildEventRegistrationShellStepLabels(source);
31255
32727
  return {
31256
32728
  kind: "event-registration",
31257
- state: "shell",
32729
+ state: "generic-shell",
31258
32730
  className: source.className ?? null,
32731
+ titleText: "Event registration",
32732
+ bodyText: buildEventRegistrationShellBodyText(stepLabels),
32733
+ stepLabels,
31259
32734
  summaryButtonText: source.buttonText?.trim() || "Register"
31260
32735
  };
31261
32736
  }
31262
- var contentEntrySchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationIslandMetaCodec, eventRegistrationIslandMetaKeys, eventRegistrationBlockRuntime, eventRegistrationInteractiveIslandPropsCodec;
32737
+ function buildEventRegistrationShellStepLabels(source) {
32738
+ const scopedEvents = scopeEventRegistrationEvents(source);
32739
+ if (scopedEvents.length === 0) {
32740
+ return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
32741
+ }
32742
+ const preSelectedEvent = findPreSelectedEvent({
32743
+ scopedEvents,
32744
+ occurrenceContext: source.occurrenceContext
32745
+ });
32746
+ const hasPreSelectedContext = Boolean(source.occurrenceContext || preSelectedEvent);
32747
+ const needsPaymentStep = hasPreSelectedContext && preSelectedEvent ? resolveEventRequiresPayment({
32748
+ eligibility: null,
32749
+ selectedTicketType: null,
32750
+ event: preSelectedEvent
32751
+ }) : false;
32752
+ return getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
32753
+ }
32754
+ function scopeEventRegistrationEvents(source) {
32755
+ const events = toRegistrationEvents(source.events ?? []);
32756
+ if (source.occurrenceContext?.seriesId) {
32757
+ return events.filter((event) => event.seriesId === source.occurrenceContext?.seriesId);
32758
+ }
32759
+ const entrySlug = source.contentEntry?.slug;
32760
+ const entryContentType = source.contentEntry?.contentTypeSlug;
32761
+ if (entrySlug && entryContentType && isEventContentType(entryContentType)) {
32762
+ return events.filter((event) => event.slug === entrySlug);
32763
+ }
32764
+ return events;
32765
+ }
32766
+ function shellLabelForRegistrationStep(step, events) {
32767
+ switch (step) {
32768
+ case "select-event":
32769
+ return isDateSelection(events) ? "Date" : "Event";
32770
+ case "select-tickets":
32771
+ return "Tickets";
32772
+ case "enter-details":
32773
+ return "Details";
32774
+ case "select-payment":
32775
+ return "Payment";
32776
+ case "error":
32777
+ case "success":
32778
+ case "submitting":
32779
+ case "redirecting":
32780
+ case "verifying-payment":
32781
+ case "verifying-timeout":
32782
+ case "payment-failed":
32783
+ return "Details";
32784
+ }
32785
+ }
32786
+ function isDateSelection(events) {
32787
+ const firstSeriesId = events[0]?.seriesId;
32788
+ return Boolean(
32789
+ events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId)
32790
+ );
32791
+ }
32792
+ function buildEventRegistrationShellBodyText(stepLabels) {
32793
+ if (stepLabels.includes("Payment")) {
32794
+ return "Preparing tickets, details, and payment options.";
32795
+ }
32796
+ if (stepLabels[0] === "Tickets") {
32797
+ return "Preparing tickets and booking details.";
32798
+ }
32799
+ return "Preparing dates, tickets, and booking details.";
32800
+ }
32801
+ function normalizeEventRegistrationEventInput(value) {
32802
+ if (!isRecord4(value)) {
32803
+ return value;
32804
+ }
32805
+ return {
32806
+ ...value,
32807
+ pricing: resolveRuntimeEventPricing(value)
32808
+ };
32809
+ }
32810
+ function isRecord4(value) {
32811
+ return typeof value === "object" && value !== null && !Array.isArray(value);
32812
+ }
32813
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, contentEntrySchema, eventRegistrationPublicEventSchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationIslandMetaCodec, eventRegistrationIslandMetaKeys, eventRegistrationBlockRuntime, eventRegistrationInteractiveIslandPropsCodec;
31263
32814
  var init_event_registration_interactive = __esm({
31264
32815
  "../blocks/src/system/runtime/nodes/event-registration.interactive.ts"() {
31265
32816
  "use strict";
31266
32817
  init_schemas2();
31267
32818
  init_event_registration_shared();
32819
+ init_events();
32820
+ init_pricing();
31268
32821
  init_islands();
31269
32822
  init_runtime();
31270
32823
  init_contract_schemas();
32824
+ init_wizardSteps();
32825
+ init_registrationDerivations();
32826
+ init_registrationEventAdapter();
32827
+ EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
32828
+ EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
31271
32829
  contentEntrySchema = z48.object({
31272
32830
  id: z48.string(),
31273
32831
  slug: z48.string(),
31274
32832
  contentTypeSlug: z48.string()
31275
32833
  });
32834
+ eventRegistrationPublicEventSchema = z48.preprocess(
32835
+ normalizeEventRegistrationEventInput,
32836
+ publicEventSchema
32837
+ );
31276
32838
  eventRegistrationSourceSchema = z48.object({
31277
32839
  siteId: z48.string().optional(),
31278
32840
  apiBaseUrl: z48.string().optional(),
@@ -31280,7 +32842,7 @@ var init_event_registration_interactive = __esm({
31280
32842
  previewToken: z48.string().nullable().optional(),
31281
32843
  occurrenceContext: occurrenceContextSchema.optional(),
31282
32844
  contentEntry: contentEntrySchema.nullable().optional(),
31283
- events: z48.array(publicEventSchema).nullable().optional(),
32845
+ events: z48.array(eventRegistrationPublicEventSchema).nullable().optional(),
31284
32846
  className: z48.string().nullable().optional(),
31285
32847
  buttonText: z48.string().nullable().optional(),
31286
32848
  maxTickets: z48.string().nullable().optional(),
@@ -31295,14 +32857,17 @@ var init_event_registration_interactive = __esm({
31295
32857
  });
31296
32858
  eventRegistrationDisplaySchema = z48.object({
31297
32859
  kind: z48.literal("event-registration"),
31298
- state: z48.literal("shell"),
32860
+ state: z48.literal("generic-shell"),
31299
32861
  className: z48.string().nullable(),
32862
+ titleText: z48.string(),
32863
+ bodyText: z48.string(),
32864
+ stepLabels: z48.array(z48.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
31300
32865
  summaryButtonText: z48.string()
31301
32866
  });
31302
32867
  eventRegistrationHydrationSchema = z48.object({
31303
32868
  occurrenceContext: occurrenceContextSchema.optional(),
31304
32869
  contentEntry: contentEntrySchema.nullable().optional(),
31305
- events: z48.array(publicEventSchema).nullable().optional(),
32870
+ events: z48.array(eventRegistrationPublicEventSchema).nullable().optional(),
31306
32871
  maxTickets: z48.string().optional(),
31307
32872
  showVenue: z48.boolean().optional(),
31308
32873
  showCapacity: z48.boolean().optional(),
@@ -31580,7 +33145,7 @@ var init_types16 = __esm({
31580
33145
  });
31581
33146
 
31582
33147
  // ../blocks/src/system/blocks/courses/shared/pricing.ts
31583
- var init_pricing = __esm({
33148
+ var init_pricing2 = __esm({
31584
33149
  "../blocks/src/system/blocks/courses/shared/pricing.ts"() {
31585
33150
  "use strict";
31586
33151
  }
@@ -31592,7 +33157,7 @@ var init_shared4 = __esm({
31592
33157
  "use strict";
31593
33158
  init_types16();
31594
33159
  init_schemas();
31595
- init_pricing();
33160
+ init_pricing2();
31596
33161
  }
31597
33162
  });
31598
33163
 
@@ -34017,7 +35582,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
34017
35582
  return keys.length >= 2 ? keys : [];
34018
35583
  }
34019
35584
  function normalizeOfferingsPreviewContentForWrite(value) {
34020
- if (!isRecord3(value)) return null;
35585
+ if (!isRecord5(value)) return null;
34021
35586
  const groupOrderValue = value.groupOrder;
34022
35587
  if (Array.isArray(groupOrderValue)) {
34023
35588
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -34030,7 +35595,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
34030
35595
  return { ...value, groupOrder: [] };
34031
35596
  }
34032
35597
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
34033
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord3) : []
35598
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
34034
35599
  );
34035
35600
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
34036
35601
  }
@@ -34044,7 +35609,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
34044
35609
  }
34045
35610
  return keys;
34046
35611
  }
34047
- function isRecord3(value) {
35612
+ function isRecord5(value) {
34048
35613
  return typeof value === "object" && value !== null && !Array.isArray(value);
34049
35614
  }
34050
35615
  var OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT, OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT, OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE, OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, OFFERINGS_PREVIEW_EVENT_PRESETS, OFFERINGS_PREVIEW_AUTHORABLE_SOURCE_KEYS, OFFERINGS_PREVIEW_SOURCE_KEYS, eventPresetSourceByKey;
@@ -34167,7 +35732,7 @@ function isOfferingsPreviewItemLimit(value) {
34167
35732
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
34168
35733
  }
34169
35734
  function normalizeOfferingsPreviewGroupOverride(value) {
34170
- if (!isRecord4(value)) return [];
35735
+ if (!isRecord6(value)) return [];
34171
35736
  const override = {};
34172
35737
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
34173
35738
  override.sourceKey = value.sourceKey;
@@ -34199,12 +35764,12 @@ function isButtonVariant(value) {
34199
35764
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
34200
35765
  }
34201
35766
  function normalizeCardStylesContent(value) {
34202
- return isRecord4(value) || value === null ? value : void 0;
35767
+ return isRecord6(value) || value === null ? value : void 0;
34203
35768
  }
34204
35769
  function normalizeSectionStylesContent(value) {
34205
- return isRecord4(value) || value === null ? value : void 0;
35770
+ return isRecord6(value) || value === null ? value : void 0;
34206
35771
  }
34207
- function isRecord4(value) {
35772
+ function isRecord6(value) {
34208
35773
  return typeof value === "object" && value !== null && !Array.isArray(value);
34209
35774
  }
34210
35775
  var publicRouteCandidatesSchema, groupOverrideFields, offeringsPreviewFields, offeringsPreviewEventDataBindings, offeringsPreviewLayout, offeringsPreviewConfig, offeringsPreviewManifest, optionalPublicEventsArraySchema, offeringsPreviewEventDataSchemas, offeringsPreviewEventDataLoaders, offeringsPreviewBlockDefinition;
@@ -38789,6 +40354,7 @@ var init_blocks = __esm({
38789
40354
  init_cta_full();
38790
40355
  init_single_button();
38791
40356
  init_form();
40357
+ init_contact_newsletter();
38792
40358
  init_faq();
38793
40359
  init_site_header();
38794
40360
  init_site_footer();
@@ -38827,6 +40393,7 @@ var init_blocks = __esm({
38827
40393
  init_cta_full();
38828
40394
  init_single_button();
38829
40395
  init_form();
40396
+ init_contact_newsletter();
38830
40397
  init_faq();
38831
40398
  init_site_header();
38832
40399
  init_site_footer();
@@ -38875,11 +40442,13 @@ var init_blocks = __esm({
38875
40442
  ];
38876
40443
  standardEyebrowTreatments = [
38877
40444
  "plain",
40445
+ "accent",
38878
40446
  "pill",
38879
40447
  "accent-pill"
38880
40448
  ];
38881
40449
  animatedEyebrowTreatments = [
38882
40450
  "plain",
40451
+ "accent",
38883
40452
  "pill",
38884
40453
  "accent-pill",
38885
40454
  "pill-bounce",
@@ -39097,6 +40666,17 @@ var init_blocks = __esm({
39097
40666
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
39098
40667
  ]
39099
40668
  })),
40669
+ withDesignCapability("block.contact-newsletter", contactNewsletterBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
40670
+ flow: conversionFlow,
40671
+ layoutProfiles: [
40672
+ layoutProfile({
40673
+ variantKey: "default",
40674
+ family: "split",
40675
+ weight: "featured",
40676
+ bias: "soft"
40677
+ })
40678
+ ]
40679
+ })),
39100
40680
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
39101
40681
  sectionSurfaces: "supported",
39102
40682
  contentFrames: ["plain", "panel"],
@@ -39188,6 +40768,12 @@ var init_blocks = __esm({
39188
40768
  family: "media-text",
39189
40769
  weight: "featured",
39190
40770
  bias: "soft"
40771
+ }),
40772
+ layoutProfile({
40773
+ variantKey: "bio",
40774
+ family: "media-text",
40775
+ weight: "featured",
40776
+ bias: "soft"
39191
40777
  })
39192
40778
  ]
39193
40779
  })),
@@ -40084,7 +41670,7 @@ var init_transforms = __esm({
40084
41670
 
40085
41671
  // ../blocks/src/system/data/linkedContentEntries.ts
40086
41672
  function coerceLinkedContentEntriesPayload(payload) {
40087
- if (!isRecord5(payload)) return payload;
41673
+ if (!isRecord7(payload)) return payload;
40088
41674
  const response = payload;
40089
41675
  if (!Array.isArray(response.entries)) return payload;
40090
41676
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -40092,12 +41678,12 @@ function coerceLinkedContentEntriesPayload(payload) {
40092
41678
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
40093
41679
  }
40094
41680
  function enrichLinkedContentEntry(entry, contentType) {
40095
- if (!isRecord5(entry)) return entry;
41681
+ if (!isRecord7(entry)) return entry;
40096
41682
  const entryId = typeof entry.id === "string" ? entry.id : null;
40097
41683
  if (!entryId) return entry;
40098
41684
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
40099
41685
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
40100
- const content = isRecord5(entry.content) ? entry.content : {};
41686
+ const content = isRecord7(entry.content) ? entry.content : {};
40101
41687
  const meta = {
40102
41688
  kind: "linked-content-entry",
40103
41689
  entryId,
@@ -40190,7 +41776,7 @@ function capitalize(value) {
40190
41776
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
40191
41777
  }
40192
41778
  function parsePublicContentTypeMeta(value) {
40193
- if (!isRecord5(value)) return null;
41779
+ if (!isRecord7(value)) return null;
40194
41780
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
40195
41781
  return {
40196
41782
  key: value.key,
@@ -40200,7 +41786,7 @@ function parsePublicContentTypeMeta(value) {
40200
41786
  };
40201
41787
  }
40202
41788
  function parsePublicContentTypeLinkedEntryEditing(value) {
40203
- if (!isRecord5(value) || typeof value.kind !== "string") return null;
41789
+ if (!isRecord7(value) || typeof value.kind !== "string") return null;
40204
41790
  switch (value.kind) {
40205
41791
  case "generic":
40206
41792
  return { kind: "generic" };
@@ -40214,7 +41800,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
40214
41800
  }
40215
41801
  }
40216
41802
  function parsePublicContentTypeFieldMeta(value) {
40217
- if (!isRecord5(value)) return [];
41803
+ if (!isRecord7(value)) return [];
40218
41804
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
40219
41805
  return [{
40220
41806
  id: value.id,
@@ -40228,7 +41814,7 @@ function parseStringArray(value) {
40228
41814
  if (!Array.isArray(value)) return null;
40229
41815
  return value.filter((item) => typeof item === "string");
40230
41816
  }
40231
- function isRecord5(value) {
41817
+ function isRecord7(value) {
40232
41818
  return typeof value === "object" && value !== null && !Array.isArray(value);
40233
41819
  }
40234
41820
  var LINKED_CONTENT_ENTRY_META_KEY;
@@ -40493,6 +42079,7 @@ var init_generateInputCss = __esm({
40493
42079
  init_types9();
40494
42080
  init_constants();
40495
42081
  init_border2();
42082
+ init_colorStyles();
40496
42083
  }
40497
42084
  });
40498
42085
 
@@ -40837,6 +42424,11 @@ ${root} {
40837
42424
  --er-event-card-bg: rgb(var(--tb-surface));
40838
42425
  --er-event-card-border-width: var(--rb-border-width, 1px);
40839
42426
  --er-event-card-hover-opacity: 1;
42427
+ --er-control-bg: rgb(var(--tb-background, var(--tb-surface)));
42428
+ --er-control-text: rgb(var(--tb-foreground, var(--tb-text)));
42429
+ --er-radius: var(--rb-block-radius);
42430
+ --er-surface-muted: rgba(var(--tb-muted, 241 245 249), 0.42);
42431
+ --er-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
40840
42432
 
40841
42433
  /* Step indicator */
40842
42434
  --er-step-active: rgb(var(--tb-primary));
@@ -43396,7 +44988,7 @@ var init_event_destination_policy = __esm({
43396
44988
  });
43397
44989
 
43398
44990
  // ../api/src/utils/isRecord.ts
43399
- function isRecord6(value) {
44991
+ function isRecord8(value) {
43400
44992
  return typeof value === "object" && value !== null && !Array.isArray(value);
43401
44993
  }
43402
44994
  var init_isRecord = __esm({
@@ -43760,7 +45352,7 @@ function sanitizeMarks(marks) {
43760
45352
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
43761
45353
  return [{ type: mark.type }];
43762
45354
  }
43763
- if (mark.type === "link" && isRecord6(mark.attrs) && typeof mark.attrs.href === "string") {
45355
+ if (mark.type === "link" && isRecord8(mark.attrs) && typeof mark.attrs.href === "string") {
43764
45356
  const attrs = { href: mark.attrs.href };
43765
45357
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
43766
45358
  attrs.target = mark.attrs.target;
@@ -43775,10 +45367,10 @@ function sanitizeMarks(marks) {
43775
45367
  return sanitized.length > 0 ? sanitized : void 0;
43776
45368
  }
43777
45369
  function unwrapRichTextValue(value) {
43778
- if (isRecord6(value) && isRecord6(value.doc)) {
45370
+ if (isRecord8(value) && isRecord8(value.doc)) {
43779
45371
  return unwrapRichTextValue(value.doc);
43780
45372
  }
43781
- if (isRecord6(value) && value.type === "doc") {
45373
+ if (isRecord8(value) && value.type === "doc") {
43782
45374
  return {
43783
45375
  type: "doc",
43784
45376
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -43787,7 +45379,7 @@ function unwrapRichTextValue(value) {
43787
45379
  return EMPTY_SITE_BANNER_BODY;
43788
45380
  }
43789
45381
  function isTipTapNodeLike(value) {
43790
- return isRecord6(value) && typeof value.type === "string";
45382
+ return isRecord8(value) && typeof value.type === "string";
43791
45383
  }
43792
45384
  function coerceTipTapNode(value) {
43793
45385
  return {
@@ -43795,9 +45387,9 @@ function coerceTipTapNode(value) {
43795
45387
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
43796
45388
  ...typeof value.text === "string" ? { text: value.text } : {},
43797
45389
  ...Array.isArray(value.marks) ? {
43798
- marks: value.marks.filter((mark) => isRecord6(mark) && typeof mark.type === "string").map((mark) => ({
45390
+ marks: value.marks.filter((mark) => isRecord8(mark) && typeof mark.type === "string").map((mark) => ({
43799
45391
  type: mark.type,
43800
- ...isRecord6(mark.attrs) ? { attrs: mark.attrs } : {}
45392
+ ...isRecord8(mark.attrs) ? { attrs: mark.attrs } : {}
43801
45393
  }))
43802
45394
  } : {}
43803
45395
  };
@@ -44449,7 +46041,7 @@ var init_src5 = __esm({
44449
46041
  function isSupportedLoaderEndpoint2(endpoint) {
44450
46042
  return SUPPORTED_LOADER_ENDPOINTS2.includes(endpoint);
44451
46043
  }
44452
- function isRecord7(value) {
46044
+ function isRecord9(value) {
44453
46045
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
44454
46046
  }
44455
46047
  function extractManualEntryRef(item) {
@@ -44457,7 +46049,7 @@ function extractManualEntryRef(item) {
44457
46049
  const trimmed = item.trim();
44458
46050
  return trimmed.length > 0 ? trimmed : null;
44459
46051
  }
44460
- if (!isRecord7(item)) return null;
46052
+ if (!isRecord9(item)) return null;
44461
46053
  for (const key of ENTRY_REF_KEYS) {
44462
46054
  const raw = item[key];
44463
46055
  if (typeof raw === "string" && raw.trim().length > 0) {