@riverbankcms/sdk 0.85.0 → 0.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/{PreviewEditorSidebar-4PH35ZIE.mjs → PreviewEditorSidebar-EVRS3C7T.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-WHMCRJGM.mjs → PreviewEditorUI-54WD4IGE.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-ZALZDJEK.mjs +8 -0
  4. package/dist/_dts/api/src/endpoints.d.ts +58 -14
  5. package/dist/_dts/api/src/index.d.ts +3 -0
  6. package/dist/_dts/api/src/launchReadiness.d.ts +3 -3
  7. package/dist/_dts/api/src/mailchimpIntegration.d.ts +215 -0
  8. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +35 -15
  9. package/dist/_dts/api/src/siteInfrastructure.d.ts +0 -14
  10. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +1 -13
  11. package/dist/_dts/api/src/types.d.ts +6 -3
  12. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  13. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -0
  14. package/dist/_dts/blocks/src/index.d.ts +2 -1
  15. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  16. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  17. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  18. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  19. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  20. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  21. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  22. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -288
  23. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  24. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  25. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +42 -42
  26. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +300 -0
  27. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +63 -3
  28. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  29. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  30. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  31. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +53 -1
  32. package/dist/_dts/blocks/src/system/manifest/richTextSchema.d.ts +27 -0
  33. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +23 -23
  34. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +10 -2
  35. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -0
  36. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -0
  37. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +1 -0
  38. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +4 -0
  39. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
  40. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +11 -1
  41. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +15 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +32 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +5 -1
  45. package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +5 -1
  46. package/dist/_dts/blocks/src/system/runtime/shared/utils/formatting.d.ts +1 -1
  47. package/dist/_dts/content-model/src/referenceFields.d.ts +1 -1
  48. package/dist/_dts/core/src/currency-format.d.ts +37 -2
  49. package/dist/_dts/core/src/event-pricing.d.ts +24 -0
  50. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +549 -18
  51. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +3 -1
  52. package/dist/_dts/sdk/src/client/types.d.ts +9 -0
  53. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  54. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +3 -0
  55. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +3 -9
  56. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +1 -1
  57. package/dist/_dts/sdk/src/manifest/three-pass-converter.d.ts +7 -18
  58. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  59. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -1
  60. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -3
  61. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +4 -24
  62. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +45 -0
  63. package/dist/_dts/sdk/src/version.d.ts +1 -1
  64. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  65. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
  66. package/dist/_dts/theme-core/src/schema.d.ts +11 -11
  67. package/dist/{chunk-ZR2GQK2A.mjs → chunk-7KOO7RPP.mjs} +953 -315
  68. package/dist/{chunk-OCGTXHSO.mjs → chunk-ER4UIW4X.mjs} +7 -7
  69. package/dist/{chunk-WFPYN7KA.mjs → chunk-HVOBXA3Y.mjs} +2 -2
  70. package/dist/{chunk-NFWGLRZZ.mjs → chunk-K3JWH6HE.mjs} +37 -3
  71. package/dist/{chunk-4QNLOTES.mjs → chunk-O4LVYUVH.mjs} +58 -14
  72. package/dist/{chunk-PYDHOMEO.mjs → chunk-YDMBIIS5.mjs} +1 -1
  73. package/dist/cli/index.mjs +408 -109
  74. package/dist/client/{accordion-2UZPBMYM.mjs → accordion-PT5CGW5N.mjs} +2 -2
  75. package/dist/client/{bookingForm-36CWQUMV.mjs → bookingForm-2HLRTEYS.mjs} +7 -7
  76. package/dist/client/bookings.mjs +51 -6
  77. package/dist/client/{carousel-QH77HR6X.mjs → carousel-Z2LKYSWA.mjs} +3 -3
  78. package/dist/client/cart-ND5IK4A6.mjs +18 -0
  79. package/dist/client/checkout-EYUSGAY7.mjs +18 -0
  80. package/dist/client/{chunk-SYIJ5JO2.mjs → chunk-6DVPO44G.mjs} +1 -1
  81. package/dist/client/{chunk-3C2VTPWI.mjs → chunk-BAWHZ5GM.mjs} +176 -13
  82. package/dist/client/{chunk-52CGCQ7B.mjs → chunk-BL66UWGD.mjs} +10 -80
  83. package/dist/client/{chunk-VGDBVNOO.mjs → chunk-DIRW2LNG.mjs} +241 -210
  84. package/dist/client/{chunk-UDNSI5PY.mjs → chunk-GOFO7HRH.mjs} +1 -2
  85. package/dist/client/{chunk-ZKUO52W3.mjs → chunk-H4MHEXYS.mjs} +1 -1
  86. package/dist/client/{chunk-ZE5G642V.mjs → chunk-LI2C6M5O.mjs} +75 -1
  87. package/dist/client/{chunk-3DTWLTXM.mjs → chunk-MHBEWDT7.mjs} +117 -3
  88. package/dist/client/{chunk-4OXKTA3D.mjs → chunk-O5JNI3E4.mjs} +2 -2
  89. package/dist/client/{chunk-XSV6KW4D.mjs → chunk-S4G65LGR.mjs} +1 -1
  90. package/dist/client/{chunk-DVNUDUVT.mjs → chunk-WBQG7VJA.mjs} +4 -1
  91. package/dist/client/{chunk-F5VRX5Y6.mjs → chunk-WCVK4MBJ.mjs} +1 -1
  92. package/dist/client/{chunk-7UCLJ5SP.mjs → chunk-X7GVFB7Y.mjs} +4 -7
  93. package/dist/client/client.mjs +2125 -1403
  94. package/dist/client/{courseRegistration-TMKU6ABO.mjs → courseRegistration-H3AZBUEG.mjs} +7 -7
  95. package/dist/client/{eventCalendar-G6TI32X6.mjs → eventCalendar-FPKJGLGS.mjs} +10 -11
  96. package/dist/client/{eventCombined-SCKEMNAR.mjs → eventCombined-QCGIZBUY.mjs} +10 -11
  97. package/dist/client/{eventDetails-XPIFXXPK.mjs → eventDetails-HIT3BJWU.mjs} +10 -11
  98. package/dist/client/{eventListing-7QFMEMGT.mjs → eventListing-R4HNWJDN.mjs} +10 -11
  99. package/dist/client/{eventRegistration-TOODSZUI.mjs → eventRegistration-Q7BYY5HF.mjs} +10 -11
  100. package/dist/client/{form-MTCMVCZT.mjs → form-NI6YOG6S.mjs} +3 -3
  101. package/dist/client/{headerSection-Y5TMR3TW.mjs → headerSection-SDYGII36.mjs} +4 -4
  102. package/dist/client/hooks.mjs +1682 -1412
  103. package/dist/client/{locationMap-RH2LG7FZ.mjs → locationMap-BDETEUQD.mjs} +3 -4
  104. package/dist/client/{newsletterForm-PCAIPFMA.mjs → newsletterForm-EKYIU67X.mjs} +70 -22
  105. package/dist/client/{productDetail-OIGDR4YE.mjs → productDetail-5UTGNN76.mjs} +8 -9
  106. package/dist/client/{productList-4MA5S2CX.mjs → productList-7YA5KXZQ.mjs} +8 -9
  107. package/dist/client/rendering/client.mjs +753 -329
  108. package/dist/client/rendering/islands.mjs +19 -19
  109. package/dist/client/rendering.mjs +3786 -3034
  110. package/dist/client/shop-AIMUMZYC.mjs +20 -0
  111. package/dist/preview-next/before-render.mjs +58 -14
  112. package/dist/preview-next/client/runtime.mjs +5 -5
  113. package/dist/preview-next/editor-chrome.css +56 -9
  114. package/dist/preview-next/middleware.mjs +58 -14
  115. package/dist/{sdk-runtime-QLOCYKVU.mjs → sdk-runtime-NW472WNT.mjs} +6 -6
  116. package/dist/server/components.mjs +1518 -1015
  117. package/dist/server/config-validation.mjs +1719 -1461
  118. package/dist/server/config.mjs +1719 -1461
  119. package/dist/server/data.mjs +1683 -1413
  120. package/dist/server/index.mjs +79 -17
  121. package/dist/server/next.mjs +1902 -1311
  122. package/dist/server/page-converter.mjs +2193 -1169
  123. package/dist/server/prebuild.mjs +1 -1
  124. package/dist/server/rendering/server.mjs +1709 -1209
  125. package/dist/server/rendering.mjs +1894 -1347
  126. package/dist/server/routing.mjs +1872 -1499
  127. package/dist/server/server.mjs +1571 -1264
  128. package/dist/server/theme-bridge.mjs +234 -0
  129. package/dist/styles/index.css +232 -0
  130. package/package.json +1 -1
  131. package/dist/SdkPreviewModeRuntime-4FGSVUYI.mjs +0 -8
  132. package/dist/client/cart-X4YK4FTW.mjs +0 -19
  133. package/dist/client/checkout-OM2BEPWD.mjs +0 -19
  134. package/dist/client/chunk-I2MMZO53.mjs +0 -6
  135. package/dist/client/shop-WXSYV5QO.mjs +0 -21
@@ -109,6 +109,57 @@ var init_collections = __esm({
109
109
  }
110
110
  });
111
111
 
112
+ // ../core/src/assert-never.ts
113
+ function assertNever(value, message = "Unexpected variant") {
114
+ throw new Error(`${message}: ${String(value)}`);
115
+ }
116
+ var init_assert_never = __esm({
117
+ "../core/src/assert-never.ts"() {
118
+ }
119
+ });
120
+
121
+ // ../core/src/currency-format.ts
122
+ function resolveCurrencyLocale(currencyCode, override) {
123
+ return CURRENCY_LOCALE_BY_CODE[currencyCode] ?? "en";
124
+ }
125
+ function formatCurrencyAmount(amountCents, currency, options) {
126
+ const currencyCode = currency.toUpperCase();
127
+ const locale = resolveCurrencyLocale(currencyCode);
128
+ try {
129
+ const exactFormatter = new Intl.NumberFormat(locale, {
130
+ style: "currency",
131
+ currency: currencyCode
132
+ });
133
+ const fractionDigits = options?.decimals === "auto" ? {
134
+ minimumFractionDigits: 0,
135
+ maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
136
+ } : {};
137
+ return new Intl.NumberFormat(locale, {
138
+ style: "currency",
139
+ currency: currencyCode,
140
+ ...fractionDigits
141
+ }).format(amountCents / 100);
142
+ } catch {
143
+ return `${(amountCents / 100).toFixed(2)} ${currencyCode}`;
144
+ }
145
+ }
146
+ var CURRENCY_LOCALE_BY_CODE;
147
+ var init_currency_format = __esm({
148
+ "../core/src/currency-format.ts"() {
149
+ CURRENCY_LOCALE_BY_CODE = {
150
+ USD: "en-US",
151
+ GBP: "en-GB",
152
+ EUR: "de-DE",
153
+ AUD: "en-AU",
154
+ CAD: "en-CA",
155
+ NZD: "en-NZ",
156
+ JPY: "ja-JP",
157
+ CNY: "zh-CN",
158
+ CHF: "de-CH"
159
+ };
160
+ }
161
+ });
162
+
112
163
  // ../core/src/event-pricing.ts
113
164
  function publicEventPricingType(pricing) {
114
165
  switch (pricing.kind) {
@@ -129,6 +180,7 @@ function isFreePublicEventPriceDisplay(display) {
129
180
  return display.display.kind === "free";
130
181
  case "exact":
131
182
  case "from":
183
+ case "range":
132
184
  case "mixed":
133
185
  case "unavailable":
134
186
  return false;
@@ -343,15 +395,6 @@ var init_business_address = __esm({
343
395
  }
344
396
  });
345
397
 
346
- // ../core/src/assert-never.ts
347
- function assertNever(value, message = "Unexpected variant") {
348
- throw new Error(`${message}: ${String(value)}`);
349
- }
350
- var init_assert_never = __esm({
351
- "../core/src/assert-never.ts"() {
352
- }
353
- });
354
-
355
398
  // ../core/src/narrow-result.ts
356
399
  var init_narrow_result = __esm({
357
400
  "../core/src/narrow-result.ts"() {
@@ -454,12 +497,6 @@ var init_csv_types = __esm({
454
497
  }
455
498
  });
456
499
 
457
- // ../core/src/currency-format.ts
458
- var init_currency_format = __esm({
459
- "../core/src/currency-format.ts"() {
460
- }
461
- });
462
-
463
500
  // ../core/src/email-format.ts
464
501
  var init_email_format = __esm({
465
502
  "../core/src/email-format.ts"() {
@@ -17955,15 +17992,53 @@ var init_newsletterForm = __esm({
17955
17992
  title: "Newsletter Form",
17956
17993
  description: "Newsletter subscription form with preset field configurations.",
17957
17994
  fields: [
17995
+ {
17996
+ id: "destinationProvider",
17997
+ type: "select",
17998
+ label: "Send signups to",
17999
+ description: "Choose where new subscribers from this form should go.",
18000
+ defaultValue: "riverbank",
18001
+ required: true,
18002
+ ui: { intent: "behavior" },
18003
+ options: [
18004
+ { value: "riverbank", label: "Riverbank newsletter" }
18005
+ ]
18006
+ },
17958
18007
  {
17959
18008
  id: "listId",
17960
18009
  type: "reference",
17961
18010
  label: "Newsletter list",
17962
18011
  description: "Select the list new subscribers should be added to.",
17963
- required: true,
18012
+ required: false,
17964
18013
  referenceKind: "newsletterList",
17965
18014
  allowManualEntry: false,
17966
- ui: { intent: "behavior" }
18015
+ ui: {
18016
+ intent: "behavior",
18017
+ visibleWhen: { field: "destinationProvider", equals: "riverbank" }
18018
+ }
18019
+ },
18020
+ {
18021
+ id: "mailchimpAudienceId",
18022
+ type: "reference",
18023
+ label: "Mailchimp audience",
18024
+ description: "Choose the Mailchimp audience for new subscribers.",
18025
+ required: false,
18026
+ referenceKind: "mailchimpAudience",
18027
+ allowManualEntry: false,
18028
+ ui: {
18029
+ intent: "behavior",
18030
+ visibleWhen: { field: "destinationProvider", equals: "mailchimp" }
18031
+ }
18032
+ },
18033
+ {
18034
+ id: "mailchimpTags",
18035
+ type: "text",
18036
+ label: "Mailchimp tags",
18037
+ description: "Optional tags to apply in Mailchimp, separated by commas or semicolons.",
18038
+ ui: {
18039
+ intent: "behavior",
18040
+ visibleWhen: { field: "destinationProvider", equals: "mailchimp" }
18041
+ }
17967
18042
  },
17968
18043
  {
17969
18044
  id: "preset",
@@ -18010,13 +18085,18 @@ var init_newsletterForm = __esm({
18010
18085
  id: "tags",
18011
18086
  type: "text",
18012
18087
  label: "Tags (optional)",
18013
- description: "Optional tags to apply on subscribe (comma or semicolon separated)."
18088
+ description: "Optional tags to apply on subscribe (comma or semicolon separated).",
18089
+ ui: {
18090
+ intent: "behavior",
18091
+ visibleWhen: { field: "destinationProvider", equals: "riverbank" }
18092
+ }
18014
18093
  }
18015
18094
  ],
18016
18095
  layout: [
18017
18096
  el(
18018
18097
  "newsletter-form",
18019
18098
  withApiBindings({
18099
+ destinationProvider: { $bind: { from: "destinationProvider" } },
18020
18100
  listId: { $bind: { from: "listId" } },
18021
18101
  preset: { $bind: { from: "preset" } },
18022
18102
  includePhone: { $bind: { from: "includePhone" } },
@@ -18522,6 +18602,83 @@ var init_media2 = __esm({
18522
18602
  ]);
18523
18603
  }
18524
18604
  });
18605
+ function createHardBreakNode() {
18606
+ return { type: "hardBreak" };
18607
+ }
18608
+ function parseRichTextInlineMarkdown(text2) {
18609
+ const out = [];
18610
+ const pushText = (value, marks) => {
18611
+ if (!value) return;
18612
+ out.push(
18613
+ marks && marks.length > 0 ? { type: "text", text: value, marks } : { type: "text", text: value }
18614
+ );
18615
+ };
18616
+ let rest = text2;
18617
+ while (rest.length > 0) {
18618
+ const start = rest.indexOf("**");
18619
+ if (start === -1) {
18620
+ pushText(rest);
18621
+ break;
18622
+ }
18623
+ const end = rest.indexOf("**", start + 2);
18624
+ if (end === -1) {
18625
+ pushText(rest);
18626
+ break;
18627
+ }
18628
+ pushText(rest.slice(0, start));
18629
+ pushText(rest.slice(start + 2, end), [{ type: "bold" }]);
18630
+ rest = rest.slice(end + 2);
18631
+ }
18632
+ return out;
18633
+ }
18634
+ function parseRichTextParagraphInlineMarkdown(text2) {
18635
+ return text2.split("\n").flatMap((line, index) => {
18636
+ const lineNodes = parseRichTextInlineMarkdown(line.trim());
18637
+ return index === 0 ? lineNodes : [createHardBreakNode(), ...lineNodes];
18638
+ });
18639
+ }
18640
+ function createRichTextDocFromMarkdown(markdown) {
18641
+ const normalized = markdown.replace(/\r\n/g, "\n").trim();
18642
+ if (!normalized) return { type: "doc", content: [] };
18643
+ const paragraphs = normalized.split(/\n{2,}/).map((paragraph) => paragraph.trim()).filter(Boolean);
18644
+ return {
18645
+ type: "doc",
18646
+ content: paragraphs.map((paragraph) => {
18647
+ const inline2 = parseRichTextParagraphInlineMarkdown(paragraph);
18648
+ return inline2.length > 0 ? { type: "paragraph", content: inline2 } : { type: "paragraph" };
18649
+ })
18650
+ };
18651
+ }
18652
+ var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema;
18653
+ var init_richTextSchema = __esm({
18654
+ "../blocks/src/system/manifest/richTextSchema.ts"() {
18655
+ TipTapMarkSchema = z.object({
18656
+ type: z.string(),
18657
+ attrs: z.record(z.string(), z.unknown()).optional()
18658
+ });
18659
+ TipTapNodeSchema = z.lazy(
18660
+ () => z.object({
18661
+ type: z.string(),
18662
+ content: z.array(TipTapNodeSchema).optional(),
18663
+ text: z.string().optional(),
18664
+ attrs: z.record(z.string(), z.unknown()).optional(),
18665
+ marks: z.array(TipTapMarkSchema).optional()
18666
+ })
18667
+ );
18668
+ z.union([
18669
+ // Canonical: TipTap document directly
18670
+ TipTapNodeSchema,
18671
+ // Legacy (read-tolerance only): wrapped in { doc: {...} }
18672
+ z.object({
18673
+ doc: TipTapNodeSchema
18674
+ })
18675
+ ]);
18676
+ RichTextDocSchema = z.object({
18677
+ type: z.literal("doc"),
18678
+ content: z.array(TipTapNodeSchema)
18679
+ });
18680
+ }
18681
+ });
18525
18682
  var bookingDepositRefundPolicySchema, bookingInstalmentPlanSchema, bookingFlexibleBalanceDueDateRuleSchema, bookingFlexibleBalanceConfigSchema, blockBookingPaymentCollectionOptionSchema, blockBookingPaymentTermsSchema;
18526
18683
  var init_bookingPaymentTerms = __esm({
18527
18684
  "../blocks/src/system/blocks/shared/bookingPaymentTerms.ts"() {
@@ -18660,6 +18817,7 @@ var eventPresetSchema, eventScheduleScopeSchema, eventDestinationModeSchema, eve
18660
18817
  var init_schemas2 = __esm({
18661
18818
  "../blocks/src/system/blocks/events/shared/schemas.ts"() {
18662
18819
  init_media2();
18820
+ init_richTextSchema();
18663
18821
  init_bookingPaymentTerms();
18664
18822
  init_schemas();
18665
18823
  eventPresetSchema = z.enum(["event", "class", "workshop", "retreat", "performance"]);
@@ -18692,7 +18850,13 @@ var init_schemas2 = __esm({
18692
18850
  z.object({ kind: z.literal("free"), currency: z.string() }),
18693
18851
  z.object({ kind: z.literal("exact"), amount: z.number(), currency: z.string() }),
18694
18852
  z.object({ kind: z.literal("from"), amount: z.number(), currency: z.string() }),
18695
- z.object({ kind: z.literal("mixed"), paidFromAmount: z.number(), currency: z.string() }),
18853
+ z.object({ kind: z.literal("range"), minAmount: z.number(), maxAmount: z.number(), currency: z.string() }),
18854
+ z.object({
18855
+ kind: z.literal("mixed"),
18856
+ paidFromAmount: z.number(),
18857
+ paidToAmount: z.number(),
18858
+ currency: z.string()
18859
+ }),
18696
18860
  z.object({ kind: z.literal("unavailable"), currency: z.string() }),
18697
18861
  z.object({ kind: z.literal("course"), display: publicCoursePriceDisplaySchema })
18698
18862
  ]);
@@ -18700,7 +18864,13 @@ var init_schemas2 = __esm({
18700
18864
  z.object({ kind: z.literal("free"), currency: z.string() }),
18701
18865
  z.object({ kind: z.literal("exact"), amount: z.number(), currency: z.string() }),
18702
18866
  z.object({ kind: z.literal("from"), amount: z.number(), currency: z.string() }),
18703
- z.object({ kind: z.literal("mixed"), paidFromAmount: z.number(), currency: z.string() }),
18867
+ z.object({ kind: z.literal("range"), minAmount: z.number(), maxAmount: z.number(), currency: z.string() }),
18868
+ z.object({
18869
+ kind: z.literal("mixed"),
18870
+ paidFromAmount: z.number(),
18871
+ paidToAmount: z.number(),
18872
+ currency: z.string()
18873
+ }),
18704
18874
  z.object({ kind: z.literal("unavailable"), currency: z.string() })
18705
18875
  ]);
18706
18876
  publicEventAttendanceModeSchema = z.enum(["in_person", "online"]);
@@ -18785,6 +18955,9 @@ var init_schemas2 = __esm({
18785
18955
  seriesId: z.string(),
18786
18956
  title: z.string(),
18787
18957
  description: z.string().nullable(),
18958
+ content: z.object({
18959
+ body: RichTextDocSchema.nullable().optional()
18960
+ }).optional(),
18788
18961
  presentation: z.object({
18789
18962
  cardTitleOverride: z.string().nullable().optional(),
18790
18963
  summary: z.string().nullable().optional(),
@@ -19167,10 +19340,21 @@ function readLegacyPriceDisplay(value, currency) {
19167
19340
  amount: readAmount(value.amount) ?? 0,
19168
19341
  currency: displayCurrency
19169
19342
  } : { kind: "unavailable", currency };
19343
+ case "range": {
19344
+ const minAmount = readAmount(value.minAmount);
19345
+ const maxAmount = readAmount(value.maxAmount);
19346
+ return minAmount !== null && maxAmount !== null ? {
19347
+ kind: "range",
19348
+ minAmount,
19349
+ maxAmount,
19350
+ currency: displayCurrency
19351
+ } : { kind: "unavailable", currency };
19352
+ }
19170
19353
  case "mixed":
19171
19354
  return readAmount(value.paidFromAmount) !== null ? {
19172
19355
  kind: "mixed",
19173
19356
  paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
19357
+ paidToAmount: readAmount(value.paidToAmount) ?? readAmount(value.paidFromAmount) ?? 0,
19174
19358
  currency: displayCurrency
19175
19359
  } : { kind: "unavailable", currency };
19176
19360
  case "unavailable":
@@ -19425,6 +19609,7 @@ var init_event_registration_interactive = __esm({
19425
19609
  successMessage: z.string().optional(),
19426
19610
  waitlistMessage: z.string().optional(),
19427
19611
  buttonVariant: registrationButtonVariantSchema.optional(),
19612
+ overlayEnabled: z.boolean().optional(),
19428
19613
  spamProtectionEnabled: z.boolean().optional(),
19429
19614
  stage: previewStageSchema.optional(),
19430
19615
  supportEmail: z.string().optional()
@@ -19448,6 +19633,7 @@ var init_event_registration_interactive = __esm({
19448
19633
  successMessage: z.string().optional(),
19449
19634
  waitlistMessage: z.string().optional(),
19450
19635
  buttonVariant: registrationButtonVariantSchema.optional(),
19636
+ overlayEnabled: z.boolean().optional(),
19451
19637
  spamProtectionEnabled: z.boolean().optional(),
19452
19638
  supportEmail: z.string().optional()
19453
19639
  });
@@ -19480,6 +19666,7 @@ var init_event_registration_interactive = __esm({
19480
19666
  successMessage: source.successMessage,
19481
19667
  waitlistMessage: source.waitlistMessage,
19482
19668
  buttonVariant: source.buttonVariant,
19669
+ overlayEnabled: source.overlayEnabled,
19483
19670
  spamProtectionEnabled: source.spamProtectionEnabled,
19484
19671
  supportEmail: source.supportEmail
19485
19672
  }
@@ -20503,10 +20690,7 @@ var init_shop_commerce_shared = __esm({
20503
20690
 
20504
20691
  // ../blocks/src/system/runtime/nodes/commerce/shared/display.ts
20505
20692
  function formatCommercePrice(cents, currency) {
20506
- return new Intl.NumberFormat("en-US", {
20507
- style: "currency",
20508
- currency: currency.toUpperCase()
20509
- }).format(cents / 100);
20693
+ return formatCurrencyAmount(cents, currency);
20510
20694
  }
20511
20695
  function getPassesHeading(passes, explicitHeading) {
20512
20696
  if (explicitHeading) return explicitHeading;
@@ -20700,6 +20884,7 @@ function formatValidity(days) {
20700
20884
  }
20701
20885
  var init_display = __esm({
20702
20886
  "../blocks/src/system/runtime/nodes/commerce/shared/display.ts"() {
20887
+ init_src();
20703
20888
  init_creditProducts();
20704
20889
  init_shop_commerce_shared();
20705
20890
  }
@@ -21162,6 +21347,65 @@ var init_gifting_interactive = __esm({
21162
21347
  }
21163
21348
  });
21164
21349
 
21350
+ // ../blocks/src/system/blocks/newsletter-signup-destination.ts
21351
+ function parseNewsletterSignupBlockId(value) {
21352
+ const trimmed = parseTrimmedString(value);
21353
+ return trimmed && BLOCK_ID_PATTERN.test(trimmed) ? trimmed : null;
21354
+ }
21355
+ function parseSignedNewsletterDestinationRef(value) {
21356
+ const trimmed = parseTrimmedString(value);
21357
+ return trimmed && SIGNED_DESTINATION_REF_PATTERN.test(trimmed) ? trimmed : null;
21358
+ }
21359
+ function parseNewsletterSignupDestinationProvider(value) {
21360
+ return value === "riverbank" || value === "mailchimp" ? value : null;
21361
+ }
21362
+ function buildNewsletterSignupBlockRef(blockId) {
21363
+ const parsed = parseNewsletterSignupBlockId(blockId);
21364
+ return parsed ? { tag: "block_ref", blockId: parsed } : null;
21365
+ }
21366
+ function normalizeNewsletterSignupEditorValuesForDestination(values) {
21367
+ const destinationProvider = parseNewsletterSignupDestinationProvider(values.destinationProvider) ?? "riverbank";
21368
+ if (destinationProvider === "mailchimp") {
21369
+ return {
21370
+ destinationProvider,
21371
+ mailchimpAudienceId: values.mailchimpAudienceId,
21372
+ mailchimpTags: values.mailchimpTags
21373
+ };
21374
+ }
21375
+ return {
21376
+ destinationProvider,
21377
+ listId: values.listId,
21378
+ tags: values.tags
21379
+ };
21380
+ }
21381
+ function deriveNewsletterSignupRuntimeSource(values) {
21382
+ const normalized = normalizeNewsletterSignupEditorValuesForDestination(values);
21383
+ if (normalized.destinationProvider === "mailchimp") {
21384
+ return {
21385
+ destinationProvider: "mailchimp",
21386
+ listId: null,
21387
+ tags: null
21388
+ };
21389
+ }
21390
+ return {
21391
+ destinationProvider: "riverbank",
21392
+ listId: parseTrimmedString(normalized.listId),
21393
+ tags: parseTrimmedString(normalized.tags)
21394
+ };
21395
+ }
21396
+ function parseTrimmedString(value) {
21397
+ if (typeof value !== "string") return null;
21398
+ const trimmed = value.trim();
21399
+ return trimmed.length > 0 ? trimmed : null;
21400
+ }
21401
+ var BLOCK_ID_PATTERN, SIGNED_DESTINATION_REF_PATTERN;
21402
+ var init_newsletter_signup_destination = __esm({
21403
+ "../blocks/src/system/blocks/newsletter-signup-destination.ts"() {
21404
+ BLOCK_ID_PATTERN = /^[A-Za-z0-9._:-]{1,200}$/;
21405
+ SIGNED_DESTINATION_REF_PATTERN = /^[A-Za-z0-9._~-]{16,1000}$/;
21406
+ }
21407
+ });
21408
+
21165
21409
  // ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
21166
21410
  function getPresetFields(preset2, options) {
21167
21411
  const includePhone = Boolean(options?.includePhone);
@@ -21227,13 +21471,29 @@ function buildNewsletterDisplay(source) {
21227
21471
  fields: getPresetFields(preset2, { includePhone })
21228
21472
  };
21229
21473
  }
21230
- var newsletterPresetSchema, newsletterFieldSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
21474
+ function parseRequiredNewsletterSignupBlockId(value) {
21475
+ const parsed = parseNewsletterSignupBlockId(value);
21476
+ if (!parsed) {
21477
+ throw new Error("Newsletter signup block destination ref requires blockId");
21478
+ }
21479
+ return parsed;
21480
+ }
21481
+ function parseRequiredSignedNewsletterDestinationRef(value) {
21482
+ const parsed = parseSignedNewsletterDestinationRef(value);
21483
+ if (!parsed) {
21484
+ throw new Error("Newsletter signup signed destination ref requires token");
21485
+ }
21486
+ return parsed;
21487
+ }
21488
+ var newsletterPresetSchema, newsletterDestinationProviderSchema, newsletterFieldSchema, newsletterSignupBlockIdSchema, signedNewsletterDestinationRefSchema, newsletterPublicDestinationRefSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
21231
21489
  var init_newsletter_form_interactive = __esm({
21232
21490
  "../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts"() {
21233
21491
  init_islands();
21234
21492
  init_runtime();
21493
+ init_newsletter_signup_destination();
21235
21494
  init_newsletter_form_types();
21236
21495
  newsletterPresetSchema = z.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
21496
+ newsletterDestinationProviderSchema = z.enum(["riverbank", "mailchimp"]);
21237
21497
  newsletterFieldSchema = z.object({
21238
21498
  id: z.string(),
21239
21499
  type: z.enum(["email", "text"]),
@@ -21241,10 +21501,24 @@ var init_newsletter_form_interactive = __esm({
21241
21501
  required: z.boolean(),
21242
21502
  placeholder: z.string().optional()
21243
21503
  });
21504
+ newsletterSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
21505
+ signedNewsletterDestinationRefSchema = z.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
21506
+ newsletterPublicDestinationRefSchema = z.discriminatedUnion("tag", [
21507
+ z.object({
21508
+ tag: z.literal("block_ref"),
21509
+ blockId: newsletterSignupBlockIdSchema
21510
+ }),
21511
+ z.object({
21512
+ tag: z.literal("signed_destination_ref"),
21513
+ token: signedNewsletterDestinationRefSchema
21514
+ })
21515
+ ]);
21244
21516
  newsletterSourceSchema = z.object({
21517
+ blockId: z.string().nullable().optional(),
21245
21518
  siteId: z.string().optional(),
21246
21519
  apiBaseUrl: z.string().optional(),
21247
21520
  listId: z.string().nullable().optional(),
21521
+ destinationProvider: newsletterDestinationProviderSchema.nullable().optional(),
21248
21522
  preset: newsletterPresetSchema.optional(),
21249
21523
  includePhone: z.boolean().optional(),
21250
21524
  buttonLabel: z.string().nullable().optional(),
@@ -21263,6 +21537,7 @@ var init_newsletter_form_interactive = __esm({
21263
21537
  fields: z.array(newsletterFieldSchema)
21264
21538
  });
21265
21539
  newsletterHydrationSchema = z.object({
21540
+ destinationRef: newsletterPublicDestinationRefSchema.nullable().optional(),
21266
21541
  listId: z.string().nullable().optional(),
21267
21542
  preset: newsletterPresetSchema,
21268
21543
  includePhone: z.boolean(),
@@ -21283,16 +21558,20 @@ var init_newsletter_form_interactive = __esm({
21283
21558
  source: createZodCodec(newsletterSourceSchema),
21284
21559
  render: createZodCodec(newsletterRenderSchema)
21285
21560
  },
21286
- buildRender: (source) => ({
21287
- display: buildNewsletterDisplay(source),
21288
- hydration: {
21289
- listId: source.listId,
21290
- preset: source.preset ?? "emailOnly",
21291
- includePhone: source.includePhone ?? false,
21292
- tags: source.tags ?? null,
21293
- spamProtectionEnabled: source.spamProtectionEnabled
21294
- }
21295
- })
21561
+ buildRender: (source) => {
21562
+ const runtimeSource = deriveNewsletterSignupRuntimeSource(source);
21563
+ return {
21564
+ display: buildNewsletterDisplay(source),
21565
+ hydration: {
21566
+ destinationRef: buildNewsletterSignupBlockRef(source.blockId),
21567
+ listId: runtimeSource.listId,
21568
+ preset: source.preset ?? "emailOnly",
21569
+ includePhone: source.includePhone ?? false,
21570
+ tags: runtimeSource.tags,
21571
+ spamProtectionEnabled: source.spamProtectionEnabled
21572
+ }
21573
+ };
21574
+ }
21296
21575
  });
21297
21576
  }
21298
21577
  });
@@ -22309,6 +22588,64 @@ var ENDPOINT_DEFINITIONS = {
22309
22588
  auth: "user",
22310
22589
  responseKind: "json"
22311
22590
  },
22591
+ listMailchimpAudiences: {
22592
+ path: "/sites/{siteId}/integrations/mailchimp/audiences",
22593
+ method: "GET",
22594
+ tags: [TAG_TEMPLATES.site],
22595
+ auth: "user",
22596
+ responseKind: "json",
22597
+ errors: ["auth:forbidden", "server:internal_error"]
22598
+ },
22599
+ getMailchimpSignupSyncHealth: {
22600
+ path: "/sites/{siteId}/integrations/mailchimp/signup-sync-health",
22601
+ method: "GET",
22602
+ tags: [TAG_TEMPLATES.site],
22603
+ auth: "user",
22604
+ responseKind: "json",
22605
+ errors: ["auth:forbidden", "server:internal_error"]
22606
+ },
22607
+ getMailchimpConnection: {
22608
+ path: "/sites/{siteId}/integrations/mailchimp/connection",
22609
+ method: "GET",
22610
+ tags: [TAG_TEMPLATES.site],
22611
+ auth: "user",
22612
+ responseKind: "json",
22613
+ errors: ["auth:forbidden", "server:internal_error"]
22614
+ },
22615
+ startMailchimpOAuth: {
22616
+ path: "/sites/{siteId}/integrations/mailchimp/oauth/start",
22617
+ method: "POST",
22618
+ tags: [TAG_TEMPLATES.site],
22619
+ auth: "user",
22620
+ responseKind: "json",
22621
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
22622
+ errors: ["auth:forbidden", "validation:invalid_input", "server:internal_error"]
22623
+ },
22624
+ refreshMailchimpAudiences: {
22625
+ path: "/sites/{siteId}/integrations/mailchimp/audiences/refresh",
22626
+ method: "POST",
22627
+ tags: [TAG_TEMPLATES.site],
22628
+ auth: "user",
22629
+ responseKind: "json",
22630
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
22631
+ errors: ["auth:forbidden", "server:internal_error"]
22632
+ },
22633
+ disconnectMailchimp: {
22634
+ path: "/sites/{siteId}/integrations/mailchimp/disconnect",
22635
+ method: "POST",
22636
+ tags: [TAG_TEMPLATES.site],
22637
+ auth: "user",
22638
+ responseKind: "json",
22639
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
22640
+ errors: ["auth:forbidden", "server:internal_error"]
22641
+ },
22642
+ mailchimpOAuthCallback: {
22643
+ path: "/auth/mailchimp/callback",
22644
+ method: "GET",
22645
+ auth: "public",
22646
+ responseKind: "void",
22647
+ errors: []
22648
+ },
22312
22649
  createNewsletterList: {
22313
22650
  path: "/sites/{siteId}/newsletter/lists",
22314
22651
  method: "POST",
@@ -24533,20 +24870,6 @@ var ENDPOINT_DEFINITIONS = {
24533
24870
  auth: "user",
24534
24871
  responseKind: "json"
24535
24872
  },
24536
- instagramUploadZip: {
24537
- path: "/instagram/upload-zip",
24538
- method: "POST",
24539
- tags: ["instagram-import"],
24540
- auth: "user",
24541
- responseKind: "json"
24542
- },
24543
- createInstagramZipUploadUrl: {
24544
- path: "/instagram/upload-zip-url",
24545
- method: "POST",
24546
- tags: ["instagram-import"],
24547
- auth: "user",
24548
- responseKind: "json"
24549
- },
24550
24873
  getAnalyticsReport: {
24551
24874
  path: "/sites/{siteId}/analytics/report",
24552
24875
  method: "GET",
@@ -35102,6 +35425,12 @@ var eventRegistrationManifest = createBlockManifest({
35102
35425
  buttonVariant: {
35103
35426
  $bind: { from: "content.buttonVariant", fallback: "primary" }
35104
35427
  },
35428
+ overlayEnabled: {
35429
+ $bind: {
35430
+ from: "$root.eventRegistrationOverlayEnabled",
35431
+ fallback: false
35432
+ }
35433
+ },
35105
35434
  // Event data from loader
35106
35435
  events: { $bind: { from: "data.events" } },
35107
35436
  // Stage for preview mode (allows registering for draft events)
@@ -41872,6 +42201,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
41872
42201
  ];
41873
42202
 
41874
42203
  // ../blocks/src/index.ts
42204
+ init_richTextSchema();
41875
42205
  init_booking_form_reserved_fields();
41876
42206
  init_colorStyles();
41877
42207
 
@@ -44125,21 +44455,6 @@ var titleSourceValueSchema = z.union([
44125
44455
  z.array(z.string().min(1)).min(1)
44126
44456
  ]);
44127
44457
 
44128
- // src/data/prefetchBlockData.ts
44129
- var SUPPORTED_LOADER_ENDPOINTS2 = [
44130
- "listPublishedEntries",
44131
- "getPublishedEntryPreview",
44132
- "listPublicEvents",
44133
- "listPublicCourses",
44134
- "listPublicTeamMembers",
44135
- "listPublicProducts",
44136
- "listPublicPasses",
44137
- "listPublicMemberships",
44138
- "getPublicFormById",
44139
- "getPublicBookingServices",
44140
- "getPublicEventDetails"
44141
- ];
44142
-
44143
44458
  // src/config/validation.ts
44144
44459
  var sdkThemePaletteSchema2 = z.record(z.string(), z.string());
44145
44460
  var sdkThemeConfigSchema2 = z.object({
@@ -44188,7 +44503,7 @@ var siteStyleConfigSchema = z.object({
44188
44503
  sectionOptions: sectionOptionsSchema,
44189
44504
  containerOptions: containerOptionsSchema
44190
44505
  }).optional();
44191
- var sdkLoaderEndpointSchema2 = z.enum(SUPPORTED_LOADER_ENDPOINTS2);
44506
+ var sdkLoaderEndpointSchema2 = z.enum(SUPPORTED_LOADER_ENDPOINTS);
44192
44507
  var allowedTransformIds = new Set(builtinTransformDefinitions.map((transform) => transform.id));
44193
44508
  var loaderTransformStepSchema = z.object({
44194
44509
  id: z.string().refine((id) => allowedTransformIds.has(id), {
@@ -64856,7 +65171,7 @@ var SimpleCache = class {
64856
65171
  };
64857
65172
 
64858
65173
  // src/version.ts
64859
- var SDK_VERSION = "0.85.0";
65174
+ var SDK_VERSION = "0.88.0";
64860
65175
 
64861
65176
  // src/client/error.ts
64862
65177
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -66010,10 +66325,16 @@ function createRiverbankClient(config2) {
66010
66325
  limit,
66011
66326
  from,
66012
66327
  to,
66328
+ afterStartsAt,
66329
+ afterId,
66013
66330
  stage,
66014
66331
  categoryIds,
66015
66332
  venueId,
66333
+ staffMemberId,
66016
66334
  kind,
66335
+ eventSurface,
66336
+ eventPresets,
66337
+ scheduleScope,
66017
66338
  entryId,
66018
66339
  seriesId,
66019
66340
  includeOccurrenceId,
@@ -66022,7 +66343,7 @@ function createRiverbankClient(config2) {
66022
66343
  if (!siteId) {
66023
66344
  throw new Error("listPublicEvents() requires siteId");
66024
66345
  }
66025
- const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
66346
+ const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
66026
66347
  return resilientFetchData(
66027
66348
  cacheKey,
66028
66349
  async (sig) => {
@@ -66031,10 +66352,16 @@ function createRiverbankClient(config2) {
66031
66352
  ...typeof limit === "number" && { limit: String(limit) },
66032
66353
  ...from && { from },
66033
66354
  ...to && { to },
66355
+ ...afterStartsAt && { afterStartsAt },
66356
+ ...afterId && { afterId },
66034
66357
  ...stage && { stage },
66035
66358
  ...categoryIds && { categoryIds },
66036
66359
  ...venueId && { venueId },
66360
+ ...staffMemberId && { staffMemberId },
66037
66361
  ...kind && { kind },
66362
+ ...eventSurface && { eventSurface },
66363
+ ...eventPresets && { eventPresets },
66364
+ ...scheduleScope && { scheduleScope },
66038
66365
  ...entryId && { entryId },
66039
66366
  ...seriesId && { seriesId },
66040
66367
  ...includeOccurrenceId && { includeOccurrenceId }
@@ -66061,6 +66388,9 @@ function createRiverbankClient(config2) {
66061
66388
  venueId,
66062
66389
  staffMemberId,
66063
66390
  kind,
66391
+ eventSurface,
66392
+ eventPresets,
66393
+ scheduleScope,
66064
66394
  entryId,
66065
66395
  seriesId,
66066
66396
  includeOccurrenceId,
@@ -66069,7 +66399,7 @@ function createRiverbankClient(config2) {
66069
66399
  if (!siteId) {
66070
66400
  throw new Error("getPublicEventDetails() requires siteId");
66071
66401
  }
66072
- const cacheKey = `public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
66402
+ const cacheKey = `public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
66073
66403
  return resilientFetchData(
66074
66404
  cacheKey,
66075
66405
  async (sig) => {
@@ -66092,6 +66422,9 @@ function createRiverbankClient(config2) {
66092
66422
  ...venueId && { venueId },
66093
66423
  ...staffMemberId && { staffMemberId },
66094
66424
  ...kind && { kind },
66425
+ ...eventSurface && { eventSurface },
66426
+ ...eventPresets && { eventPresets },
66427
+ ...scheduleScope && { scheduleScope },
66095
66428
  ...entryId && { entryId },
66096
66429
  ...seriesId && { seriesId },
66097
66430
  ...includeOccurrenceId && { includeOccurrenceId }
@@ -69582,11 +69915,12 @@ Your task: Analyze the HTML/JSX markup and identify ALL pieces of content that s
69582
69915
 
69583
69916
  1. **Use richText for formatted lists and multi-line content:**
69584
69917
  - Opening hours \u2192 single richText with formatted list (not 6 separate text fields)
69585
- - Address with line breaks \u2192 single richText (not address1, address2, city, postcode)
69918
+ - Address with line breaks \u2192 single richText with hard line breaks / Shift+Enter between lines (not address1, address2, city, postcode)
69586
69919
  - Feature lists, specs, ingredients \u2192 richText with bullet list
69587
69920
 
69588
- RichText supports: paragraphs, bold, italic, bullet lists, numbered lists, links.
69921
+ RichText supports: paragraphs, hard line breaks, bold, italic, bullet lists, numbered lists, links.
69589
69922
  The CMS editor can format content naturally without rigid field structure.
69923
+ For line-oriented content like addresses, opening hours, and contact details, keep one logical paragraph and use hard line breaks between lines. In the CMS editor, authors create those line breaks with Shift+Enter; Enter creates a new paragraph.
69590
69924
 
69591
69925
  2. **Use repeaters only when items need individual editing/reordering:**
69592
69926
  - Testimonials with avatar + name + quote \u2192 repeater (each item is distinct)
@@ -69598,8 +69932,8 @@ Your task: Analyze the HTML/JSX markup and identify ALL pieces of content that s
69598
69932
  \u274C socialInstagram, socialFacebook, socialTwitter (proliferating similar fields)
69599
69933
  \u274C address1, address2, city, state, zip (5 fields for one address)
69600
69934
 
69601
- \u2705 openingHours: single richText field with formatted content
69602
- \u2705 address: single richText field with line breaks
69935
+ \u2705 openingHours: single richText field with formatted content / hard line breaks
69936
+ \u2705 address: single richText field with hard line breaks (Shift+Enter in the editor)
69603
69937
  \u2705 socialLinks: repeater with { platform, url } IF user needs to add/remove links
69604
69938
 
69605
69939
  ## Field Type Rules
@@ -69629,7 +69963,7 @@ Your task: Analyze the HTML/JSX markup and identify ALL pieces of content that s
69629
69963
 
69630
69964
  ### When to use each type:
69631
69965
  - Single value \u2192 simple field (text, richText, media, link)
69632
- - Formatted list where structure is static \u2192 richText (opening hours, address)
69966
+ - Formatted list where structure is static \u2192 richText (opening hours, address; use hard line breaks / Shift+Enter for line-oriented text)
69633
69967
  - List where items can be added/removed/reordered \u2192 repeater
69634
69968
  - Related fields that belong together \u2192 group
69635
69969
 
@@ -70041,43 +70375,8 @@ Do NOT include [data-block=...] in selectors - we add that automatically.
70041
70375
  var DEFAULT_MANIFEST_MODEL = process.env.RIVERBANK_MANIFEST_MODEL || "gpt-5-mini";
70042
70376
 
70043
70377
  // src/manifest/three-pass-converter.ts
70044
- function parseInlineMarkdown(text2) {
70045
- const out = [];
70046
- const pushText = (value, marks) => {
70047
- if (!value) return;
70048
- out.push(
70049
- marks && marks.length > 0 ? { type: "text", text: value, marks } : { type: "text", text: value }
70050
- );
70051
- };
70052
- let rest = text2;
70053
- while (rest.length > 0) {
70054
- const start = rest.indexOf("**");
70055
- if (start === -1) {
70056
- pushText(rest);
70057
- break;
70058
- }
70059
- const end = rest.indexOf("**", start + 2);
70060
- if (end === -1) {
70061
- pushText(rest);
70062
- break;
70063
- }
70064
- pushText(rest.slice(0, start));
70065
- pushText(rest.slice(start + 2, end), [{ type: "bold" }]);
70066
- rest = rest.slice(end + 2);
70067
- }
70068
- return out;
70069
- }
70070
70378
  function stringToTipTapDoc(text2) {
70071
- const normalized = text2.replace(/\r\n/g, "\n").trim();
70072
- if (!normalized) return { type: "doc", content: [] };
70073
- const paragraphs = normalized.split(/\n{2,}/).map((p) => p.trim()).filter(Boolean);
70074
- return {
70075
- type: "doc",
70076
- content: paragraphs.map((p) => {
70077
- const inline2 = parseInlineMarkdown(p);
70078
- return inline2.length > 0 ? { type: "paragraph", content: inline2 } : { type: "paragraph" };
70079
- })
70080
- };
70379
+ return createRichTextDocFromMarkdown(text2);
70081
70380
  }
70082
70381
  function coerceRichTextDefaultValue(value) {
70083
70382
  if (value === null || value === void 0) {