@riverbankcms/sdk 0.90.0 → 0.91.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 (90) hide show
  1. package/dist/{PreviewEditorSidebar-KVXNF3VW.mjs → PreviewEditorSidebar-3TT47WCF.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-J3JN5Z7T.mjs → PreviewEditorUI-ORCLLUNZ.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-GMCDQPZZ.mjs +8 -0
  4. package/dist/_dts/api/src/bookingConfig.d.ts +3 -0
  5. package/dist/_dts/api/src/event-listing-destination.d.ts +59 -0
  6. package/dist/_dts/api/src/index.d.ts +4 -0
  7. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +0 -1
  8. package/dist/_dts/api/src/navigation.d.ts +2 -0
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +3 -1
  10. package/dist/_dts/api/src/settings/permissions.d.ts +273 -0
  11. package/dist/_dts/api/src/types.d.ts +1 -0
  12. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +60 -2
  13. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +12 -1
  14. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +9 -9
  15. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +1 -1
  16. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +17 -0
  17. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +5 -0
  18. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +24 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/destination.d.ts +8 -0
  20. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +3 -0
  21. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +7 -0
  22. package/dist/_dts/core/src/event-pricing.d.ts +12 -2
  23. package/dist/_dts/core/src/string.d.ts +12 -0
  24. package/dist/_dts/sdk/src/cli/sync/validation.d.ts +2 -2
  25. package/dist/_dts/sdk/src/public-api/contracts.d.ts +11 -1
  26. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +11 -1
  27. package/dist/_dts/sdk/src/version.d.ts +1 -1
  28. package/dist/{chunk-GSPFFUVB.mjs → chunk-AFPMCLS7.mjs} +2 -2
  29. package/dist/{chunk-RQ3XZ4SJ.mjs → chunk-GDT2QGIL.mjs} +1 -1
  30. package/dist/{chunk-PMBB6MQ7.mjs → chunk-RQUZYSES.mjs} +345 -153
  31. package/dist/{chunk-AEOYWPE4.mjs → chunk-S3YHJWEU.mjs} +7 -7
  32. package/dist/{chunk-UG7I7S7W.mjs → chunk-U5YM4AWE.mjs} +1 -1
  33. package/dist/{chunk-BOQXMCSP.mjs → chunk-ZA2S7H34.mjs} +3 -3
  34. package/dist/cli/index.mjs +363 -437
  35. package/dist/cli/init-docs/content/workflow-add-block.md +48 -0
  36. package/dist/cli/init-docs/content/workflow-custom-block.md +10 -0
  37. package/dist/client/{accordion-GXQNWQ6O.mjs → accordion-AFX37652.mjs} +2 -2
  38. package/dist/client/{bookingForm-STLUJ36H.mjs → bookingForm-32V5QCOW.mjs} +6 -6
  39. package/dist/client/bookings.mjs +1170 -571
  40. package/dist/client/{carousel-CVRN6EPP.mjs → carousel-TJGQJ7ER.mjs} +3 -3
  41. package/dist/client/{cart-IYIBA5CL.mjs → cart-JUU2JEW4.mjs} +6 -6
  42. package/dist/client/{checkout-O3BGM4GS.mjs → checkout-RD6BTFX4.mjs} +6 -6
  43. package/dist/client/{chunk-DAS5CIER.mjs → chunk-6QZIBNGV.mjs} +119 -21
  44. package/dist/client/{chunk-VFHZLZAC.mjs → chunk-6RN62XBV.mjs} +1 -1
  45. package/dist/client/{chunk-D3ETC2SU.mjs → chunk-C4LP6BPG.mjs} +1 -1
  46. package/dist/client/{chunk-NBFRJ5NB.mjs → chunk-CKXEUWWA.mjs} +2 -2
  47. package/dist/client/{chunk-4RTFGHZN.mjs → chunk-E6VIWZUG.mjs} +6 -3
  48. package/dist/client/{chunk-Z62JYS5O.mjs → chunk-FMZZHAIR.mjs} +2 -2
  49. package/dist/client/{chunk-FHU6PFPM.mjs → chunk-ISAUXU5R.mjs} +1 -1
  50. package/dist/client/{chunk-HIHOQGIP.mjs → chunk-LJCX6V7Q.mjs} +9 -9
  51. package/dist/client/{chunk-6DPXDOIL.mjs → chunk-MLBNVN4H.mjs} +99 -26
  52. package/dist/client/{chunk-7DH35FGA.mjs → chunk-PMNAV6LO.mjs} +1 -1
  53. package/dist/client/{chunk-MFPKS6QS.mjs → chunk-RMOFBBNA.mjs} +5 -5
  54. package/dist/client/{chunk-25W2EQUN.mjs → chunk-RWYFG625.mjs} +17 -8
  55. package/dist/client/client.mjs +305 -113
  56. package/dist/client/{courseRegistration-2D3ACMJR.mjs → courseRegistration-X63QAIVV.mjs} +6 -6
  57. package/dist/client/{eventCalendar-QY4UZUFF.mjs → eventCalendar-5T24GCZL.mjs} +9 -9
  58. package/dist/client/{eventCombined-RRCDKJC2.mjs → eventCombined-AZVTF22X.mjs} +9 -9
  59. package/dist/client/{eventDetails-YO335BUT.mjs → eventDetails-7GPFNLGF.mjs} +9 -9
  60. package/dist/client/{eventListing-PXA6GFQ3.mjs → eventListing-QEUMTMUM.mjs} +9 -9
  61. package/dist/client/{eventRegistration-2ZHEDDXO.mjs → eventRegistration-P2EDKCQZ.mjs} +9 -9
  62. package/dist/client/{form-ZS6KX4U2.mjs → form-NUJ7H4IN.mjs} +3 -3
  63. package/dist/client/{headerSection-QK5SLIIB.mjs → headerSection-JB7LECPL.mjs} +3 -3
  64. package/dist/client/hooks.mjs +93 -42
  65. package/dist/client/{locationMap-GFNIUD2X.mjs → locationMap-UEYWUCSW.mjs} +3 -3
  66. package/dist/client/{newsletterForm-PGLTTCUG.mjs → newsletterForm-S2YZQ2X7.mjs} +3 -3
  67. package/dist/client/{productDetail-OPBE5ZPI.mjs → productDetail-H5MADGG7.mjs} +6 -6
  68. package/dist/client/{productList-NI72Q62Z.mjs → productList-DK7YON7H.mjs} +6 -6
  69. package/dist/client/rendering/client.mjs +262 -70
  70. package/dist/client/rendering/islands.mjs +19 -19
  71. package/dist/client/rendering.mjs +306 -114
  72. package/dist/client/{shop-3ZQPEWYI.mjs → shop-6PA7RDRJ.mjs} +6 -6
  73. package/dist/client/spam-protection.mjs +10 -10
  74. package/dist/preview-next/client/runtime.mjs +5 -5
  75. package/dist/{sdk-runtime-FSHXCWDS.mjs → sdk-runtime-JP5347OB.mjs} +6 -6
  76. package/dist/server/components.mjs +149 -69
  77. package/dist/server/config-validation.mjs +85 -34
  78. package/dist/server/config.mjs +85 -34
  79. package/dist/server/data.mjs +93 -42
  80. package/dist/server/index.mjs +1 -1
  81. package/dist/server/navigation.mjs +2 -2
  82. package/dist/server/next.mjs +170 -90
  83. package/dist/server/page-converter.mjs +77 -26
  84. package/dist/server/prebuild.mjs +1 -1
  85. package/dist/server/rendering/server.mjs +161 -81
  86. package/dist/server/rendering.mjs +165 -85
  87. package/dist/server/routing.mjs +135 -58
  88. package/dist/server/server.mjs +102 -51
  89. package/package.json +2 -2
  90. package/dist/SdkPreviewModeRuntime-UBL6MSNP.mjs +0 -8
@@ -6609,6 +6609,8 @@ function publicEventPricingType(pricing) {
6609
6609
  case "ticket_types":
6610
6610
  case "course":
6611
6611
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6612
+ case "external":
6613
+ return "external";
6612
6614
  }
6613
6615
  }
6614
6616
  function isFreePublicEventPriceDisplay(display) {
@@ -6622,6 +6624,7 @@ function isFreePublicEventPriceDisplay(display) {
6622
6624
  case "range":
6623
6625
  case "mixed":
6624
6626
  case "unavailable":
6627
+ case "external":
6625
6628
  return false;
6626
6629
  }
6627
6630
  }
@@ -6670,11 +6673,11 @@ function isValidTimeZone(timeZone) {
6670
6673
  }
6671
6674
  function getSafeTimeZone(timeZone) {
6672
6675
  const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
6673
- return normalized && isValidTimeZone(normalized) ? normalized : FALLBACK_TIMEZONE;
6676
+ return normalized.length > 0 && isValidTimeZone(normalized) ? normalized : FALLBACK_TIMEZONE;
6674
6677
  }
6675
6678
  function parseStrictBookingTimeZone(timeZone) {
6676
6679
  const normalized = timeZone.trim();
6677
- if (!normalized || !isValidTimeZone(normalized)) {
6680
+ if (normalized.length === 0 || !isValidTimeZone(normalized)) {
6678
6681
  return null;
6679
6682
  }
6680
6683
  return normalized;
@@ -6748,7 +6751,7 @@ function parseScheduledBookingDateTime(input) {
6748
6751
  try {
6749
6752
  const startsAt = toUtcIsoDateTimeString(input.startsAt);
6750
6753
  const timeZone = parseStrictBookingTimeZone(input.timeZone);
6751
- if (!timeZone) {
6754
+ if (timeZone === null) {
6752
6755
  return {
6753
6756
  ok: false,
6754
6757
  field: "timeZone",
@@ -6817,10 +6820,10 @@ function normalizeLocationAddressText(value) {
6817
6820
  return null;
6818
6821
  }
6819
6822
  const trimmed = value.trim();
6820
- return trimmed ? trimmed : null;
6823
+ return trimmed.length > 0 ? trimmed : null;
6821
6824
  }
6822
6825
  function hasLocationCoordinates(value) {
6823
- return typeof value?.lat === "number" && typeof value?.lng === "number";
6826
+ return value != null && typeof value.lat === "number" && typeof value.lng === "number";
6824
6827
  }
6825
6828
  function toLocationCoordinates(value) {
6826
6829
  if (!hasLocationCoordinates(value)) {
@@ -6837,6 +6840,13 @@ var init_location = __esm({
6837
6840
  }
6838
6841
  });
6839
6842
 
6843
+ // ../core/src/string.ts
6844
+ var init_string = __esm({
6845
+ "../core/src/string.ts"() {
6846
+ "use strict";
6847
+ }
6848
+ });
6849
+
6840
6850
  // ../core/src/business-address.ts
6841
6851
  var init_business_address = __esm({
6842
6852
  "../core/src/business-address.ts"() {
@@ -6977,13 +6987,6 @@ var init_slug = __esm({
6977
6987
  }
6978
6988
  });
6979
6989
 
6980
- // ../core/src/string.ts
6981
- var init_string = __esm({
6982
- "../core/src/string.ts"() {
6983
- "use strict";
6984
- }
6985
- });
6986
-
6987
6990
  // ../core/src/uuid.ts
6988
6991
  var init_uuid = __esm({
6989
6992
  "../core/src/uuid.ts"() {
@@ -32496,7 +32499,7 @@ var init_schemas = __esm({
32496
32499
 
32497
32500
  // ../blocks/src/system/blocks/events/shared/schemas.ts
32498
32501
  import { z as z46 } from "zod";
32499
- var eventPresetSchema, eventScheduleScopeSchema, eventDestinationModeSchema, eventVenueSchema, eventCategorySchema, pricingTypeSchema, accessRestrictionSchema, eventPricingModeSchema, publicCoursePriceDisplaySchema, publicEventPriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
32502
+ var eventPresetSchema, eventScheduleScopeSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, pricingTypeSchema, accessRestrictionSchema, eventPricingModeSchema, publicCoursePriceDisplaySchema, publicEventPriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
32500
32503
  var init_schemas2 = __esm({
32501
32504
  "../blocks/src/system/blocks/events/shared/schemas.ts"() {
32502
32505
  "use strict";
@@ -32507,6 +32510,18 @@ var init_schemas2 = __esm({
32507
32510
  eventPresetSchema = z46.enum(["event", "class", "workshop", "retreat", "performance"]);
32508
32511
  eventScheduleScopeSchema = z46.enum(["recurring", "oneOff"]);
32509
32512
  eventDestinationModeSchema = z46.enum(["cms-managed", "system-managed"]);
32513
+ publicEventDestinationSchema = z46.discriminatedUnion("kind", [
32514
+ z46.object({
32515
+ kind: z46.literal("native"),
32516
+ mode: eventDestinationModeSchema,
32517
+ path: z46.string()
32518
+ }),
32519
+ z46.object({
32520
+ kind: z46.literal("external"),
32521
+ url: z46.string(),
32522
+ label: z46.string()
32523
+ })
32524
+ ]);
32510
32525
  eventVenueSchema = z46.object({
32511
32526
  id: z46.string(),
32512
32527
  name: z46.string(),
@@ -32521,7 +32536,7 @@ var init_schemas2 = __esm({
32521
32536
  name: z46.string(),
32522
32537
  color: z46.string().nullable()
32523
32538
  });
32524
- pricingTypeSchema = z46.enum(["free", "paid"]);
32539
+ pricingTypeSchema = z46.enum(["free", "paid", "external"]);
32525
32540
  accessRestrictionSchema = z46.enum(["none", "category"]);
32526
32541
  eventPricingModeSchema = z46.enum(["single", "ticket_types"]);
32527
32542
  publicCoursePriceDisplaySchema = z46.discriminatedUnion("kind", [
@@ -32542,6 +32557,7 @@ var init_schemas2 = __esm({
32542
32557
  currency: z46.string()
32543
32558
  }),
32544
32559
  z46.object({ kind: z46.literal("unavailable"), currency: z46.string() }),
32560
+ z46.object({ kind: z46.literal("external"), label: z46.string() }),
32545
32561
  z46.object({ kind: z46.literal("course"), display: publicCoursePriceDisplaySchema })
32546
32562
  ]);
32547
32563
  publicEventTicketTypePriceDisplaySchema = z46.union([
@@ -32620,6 +32636,10 @@ var init_schemas2 = __esm({
32620
32636
  z46.object({
32621
32637
  kind: z46.literal("course"),
32622
32638
  display: z46.object({ kind: z46.literal("course"), display: publicCoursePriceDisplaySchema })
32639
+ }),
32640
+ z46.object({
32641
+ kind: z46.literal("external"),
32642
+ display: z46.object({ kind: z46.literal("external"), label: z46.string() })
32623
32643
  })
32624
32644
  ]);
32625
32645
  publicTeamMemberSummarySchema = z46.object({
@@ -32648,7 +32668,8 @@ var init_schemas2 = __esm({
32648
32668
  image: mediaSchema2.nullable().optional()
32649
32669
  }).optional(),
32650
32670
  slug: z46.string(),
32651
- path: z46.string(),
32671
+ path: z46.string().nullable(),
32672
+ destination: publicEventDestinationSchema,
32652
32673
  requiresRegistration: z46.boolean(),
32653
32674
  deliveryMode: z46.enum(["in_person", "online", "hybrid"]),
32654
32675
  attendanceModes: z46.array(publicEventAttendanceModeAvailabilitySchema),
@@ -33000,11 +33021,45 @@ var init_events = __esm({
33000
33021
  }
33001
33022
  });
33002
33023
 
33024
+ // ../blocks/src/system/runtime/nodes/events/shared/destination.ts
33025
+ function isRecord3(value) {
33026
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33027
+ }
33028
+ function isRuntimeEventDestination(value) {
33029
+ if (!isRecord3(value) || typeof value.kind !== "string") return false;
33030
+ if (value.kind === "native") {
33031
+ return (value.mode === "cms-managed" || value.mode === "system-managed") && typeof value.path === "string";
33032
+ }
33033
+ return value.kind === "external" && typeof value.url === "string" && typeof value.label === "string";
33034
+ }
33035
+ function resolveRuntimeEventDestination(event) {
33036
+ if (isRuntimeEventDestination(event.destination)) {
33037
+ return event.destination;
33038
+ }
33039
+ return {
33040
+ kind: "native",
33041
+ mode: event.eventDestinationMode === "system-managed" ? "system-managed" : "cms-managed",
33042
+ path: typeof event.path === "string" ? event.path : ""
33043
+ };
33044
+ }
33045
+ var init_destination = __esm({
33046
+ "../blocks/src/system/runtime/nodes/events/shared/destination.ts"() {
33047
+ "use strict";
33048
+ }
33049
+ });
33050
+
33003
33051
  // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
33004
33052
  function resolveRuntimeEventPricing(event) {
33005
33053
  if (isPublicEventPricing(event.pricing)) {
33006
33054
  return event.pricing;
33007
33055
  }
33056
+ const destination = resolveRuntimeEventDestination(event);
33057
+ if (destination.kind === "external") {
33058
+ return {
33059
+ kind: "external",
33060
+ display: { kind: "external", label: "External registration" }
33061
+ };
33062
+ }
33008
33063
  const legacy = event;
33009
33064
  const currency = readCurrency(legacy.currency);
33010
33065
  if (event.requiresRegistration === false) {
@@ -33041,22 +33096,22 @@ function resolveRuntimeEventPricing(event) {
33041
33096
  function readCurrency(value) {
33042
33097
  return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
33043
33098
  }
33044
- function isRecord3(value) {
33099
+ function isRecord4(value) {
33045
33100
  return typeof value === "object" && value !== null && !Array.isArray(value);
33046
33101
  }
33047
33102
  function isPublicEventPricing(value) {
33048
- if (!isRecord3(value) || typeof value.kind !== "string") return false;
33049
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
33103
+ if (!isRecord4(value) || typeof value.kind !== "string") return false;
33104
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
33050
33105
  }
33051
33106
  function isPublicEventTicketType(value) {
33052
- return isRecord3(value) && typeof value.id === "string";
33107
+ return isRecord4(value) && typeof value.id === "string";
33053
33108
  }
33054
33109
  function readTicketTypePriceDisplay(value, currency) {
33055
33110
  const display = readLegacyPriceDisplay(value, currency);
33056
- return display.kind === "course" ? { kind: "unavailable", currency } : display;
33111
+ return display.kind === "course" || display.kind === "external" ? { kind: "unavailable", currency } : display;
33057
33112
  }
33058
33113
  function readLegacyPriceDisplay(value, currency) {
33059
- if (!isRecord3(value) || typeof value.kind !== "string") {
33114
+ if (!isRecord4(value) || typeof value.kind !== "string") {
33060
33115
  return { kind: "unavailable", currency };
33061
33116
  }
33062
33117
  const displayCurrency = readCurrency(value.currency);
@@ -33095,7 +33150,7 @@ function readLegacyPriceDisplay(value, currency) {
33095
33150
  case "unavailable":
33096
33151
  return { kind: "unavailable", currency: displayCurrency };
33097
33152
  case "course":
33098
- return isRecord3(value.display) ? {
33153
+ return isRecord4(value.display) ? {
33099
33154
  kind: "course",
33100
33155
  display: readCoursePriceDisplay(value.display, displayCurrency)
33101
33156
  } : {
@@ -33133,6 +33188,7 @@ var DEFAULT_EVENT_CURRENCY;
33133
33188
  var init_pricing = __esm({
33134
33189
  "../blocks/src/system/runtime/nodes/events/shared/pricing.ts"() {
33135
33190
  "use strict";
33191
+ init_destination();
33136
33192
  DEFAULT_EVENT_CURRENCY = "USD";
33137
33193
  }
33138
33194
  });
@@ -33201,7 +33257,7 @@ function resolveEventRequiresPayment(input) {
33201
33257
  if (!input.event) {
33202
33258
  return false;
33203
33259
  }
33204
- return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
33260
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) === "paid";
33205
33261
  }
33206
33262
  var init_registrationDerivations = __esm({
33207
33263
  "../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts"() {
@@ -33309,15 +33365,16 @@ function buildEventRegistrationShellBodyText(stepLabels) {
33309
33365
  return "Preparing dates, tickets, and booking details.";
33310
33366
  }
33311
33367
  function normalizeEventRegistrationEventInput(value) {
33312
- if (!isRecord4(value)) {
33368
+ if (!isRecord5(value)) {
33313
33369
  return value;
33314
33370
  }
33315
33371
  return {
33316
33372
  ...value,
33373
+ destination: resolveRuntimeEventDestination(value),
33317
33374
  pricing: resolveRuntimeEventPricing(value)
33318
33375
  };
33319
33376
  }
33320
- function isRecord4(value) {
33377
+ function isRecord5(value) {
33321
33378
  return typeof value === "object" && value !== null && !Array.isArray(value);
33322
33379
  }
33323
33380
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, contentEntrySchema, eventRegistrationPublicEventSchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationIslandMetaCodec, eventRegistrationIslandMetaKeys, eventRegistrationBlockRuntime, eventRegistrationInteractiveIslandPropsCodec;
@@ -33329,6 +33386,7 @@ var init_event_registration_interactive = __esm({
33329
33386
  init_event_registration_shared();
33330
33387
  init_events();
33331
33388
  init_pricing();
33389
+ init_destination();
33332
33390
  init_islands();
33333
33391
  init_runtime();
33334
33392
  init_contract_schemas();
@@ -36159,7 +36217,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
36159
36217
  return keys.length >= 2 ? keys : [];
36160
36218
  }
36161
36219
  function normalizeOfferingsPreviewContentForWrite(value) {
36162
- if (!isRecord5(value)) return null;
36220
+ if (!isRecord6(value)) return null;
36163
36221
  const groupOrderValue = value.groupOrder;
36164
36222
  if (Array.isArray(groupOrderValue)) {
36165
36223
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -36172,7 +36230,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
36172
36230
  return { ...value, groupOrder: [] };
36173
36231
  }
36174
36232
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
36175
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord5) : []
36233
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord6) : []
36176
36234
  );
36177
36235
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
36178
36236
  }
@@ -36186,7 +36244,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
36186
36244
  }
36187
36245
  return keys;
36188
36246
  }
36189
- function isRecord5(value) {
36247
+ function isRecord6(value) {
36190
36248
  return typeof value === "object" && value !== null && !Array.isArray(value);
36191
36249
  }
36192
36250
  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;
@@ -36309,7 +36367,7 @@ function isOfferingsPreviewItemLimit(value) {
36309
36367
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
36310
36368
  }
36311
36369
  function normalizeOfferingsPreviewGroupOverride(value) {
36312
- if (!isRecord6(value)) return [];
36370
+ if (!isRecord7(value)) return [];
36313
36371
  const override = {};
36314
36372
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
36315
36373
  override.sourceKey = value.sourceKey;
@@ -36341,12 +36399,12 @@ function isButtonVariant(value) {
36341
36399
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
36342
36400
  }
36343
36401
  function normalizeCardStylesContent(value) {
36344
- return isRecord6(value) || value === null ? value : void 0;
36402
+ return isRecord7(value) || value === null ? value : void 0;
36345
36403
  }
36346
36404
  function normalizeSectionStylesContent(value) {
36347
- return isRecord6(value) || value === null ? value : void 0;
36405
+ return isRecord7(value) || value === null ? value : void 0;
36348
36406
  }
36349
- function isRecord6(value) {
36407
+ function isRecord7(value) {
36350
36408
  return typeof value === "object" && value !== null && !Array.isArray(value);
36351
36409
  }
36352
36410
  var publicRouteCandidatesSchema, groupOverrideFields, offeringsPreviewFields, offeringsPreviewEventDataBindings, offeringsPreviewLayout, offeringsPreviewConfig, offeringsPreviewManifest, optionalPublicEventsArraySchema, offeringsPreviewEventDataSchemas, offeringsPreviewEventDataLoaders, offeringsPreviewBlockDefinition;
@@ -39909,7 +39967,7 @@ function deriveNewsletterSignupRuntimeSource(values) {
39909
39967
  };
39910
39968
  }
39911
39969
  function sanitizeNewsletterSignupPublicContent(content) {
39912
- if (!isRecord7(content)) return content;
39970
+ if (!isRecord8(content)) return content;
39913
39971
  const provider = parseNewsletterSignupDestinationProvider(content.destinationProvider) ?? getProviderFromExplicitDestination(content.destination);
39914
39972
  const {
39915
39973
  destination: _destination,
@@ -39928,7 +39986,7 @@ function sanitizeNewsletterSignupPublicContent(content) {
39928
39986
  return mutablePublicContent;
39929
39987
  }
39930
39988
  function getProviderFromExplicitDestination(destination) {
39931
- if (!isRecord7(destination) || typeof destination.tag !== "string") return null;
39989
+ if (!isRecord8(destination) || typeof destination.tag !== "string") return null;
39932
39990
  if (destination.tag === "riverbank_list") return "riverbank";
39933
39991
  if (destination.tag === "mailchimp_audience") return "mailchimp";
39934
39992
  return null;
@@ -39938,7 +39996,7 @@ function parseTrimmedString(value) {
39938
39996
  const trimmed = value.trim();
39939
39997
  return trimmed.length > 0 ? trimmed : null;
39940
39998
  }
39941
- function isRecord7(value) {
39999
+ function isRecord8(value) {
39942
40000
  return typeof value === "object" && value !== null;
39943
40001
  }
39944
40002
  var BLOCK_ID_PATTERN, SIGNED_DESTINATION_REF_PATTERN;
@@ -42156,11 +42214,11 @@ function extractRouteUpdatedAt(candidate) {
42156
42214
  }
42157
42215
  function resolveRouteTargetForStage(routeIdValue, routes, stageInput) {
42158
42216
  const routeId = typeof routeIdValue === "string" ? routeIdValue : null;
42159
- if (!routeId || !routes) return null;
42217
+ if (routeId === null || routeId.length === 0 || routes === void 0) return null;
42160
42218
  const routeEntry = routes[routeId];
42161
42219
  if (!isRouteVisibleInStage(routeEntry, stageInput)) return null;
42162
42220
  const href = extractRouteHref(routeEntry, stageInput);
42163
- if (!href) return null;
42221
+ if (href === null) return null;
42164
42222
  return {
42165
42223
  routeId,
42166
42224
  href,
@@ -42350,7 +42408,7 @@ var init_transforms = __esm({
42350
42408
 
42351
42409
  // ../blocks/src/system/data/linkedContentEntries.ts
42352
42410
  function coerceLinkedContentEntriesPayload(payload) {
42353
- if (!isRecord8(payload)) return payload;
42411
+ if (!isRecord9(payload)) return payload;
42354
42412
  const response = payload;
42355
42413
  if (!Array.isArray(response.entries)) return payload;
42356
42414
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -42358,12 +42416,12 @@ function coerceLinkedContentEntriesPayload(payload) {
42358
42416
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
42359
42417
  }
42360
42418
  function enrichLinkedContentEntry(entry, contentType) {
42361
- if (!isRecord8(entry)) return entry;
42419
+ if (!isRecord9(entry)) return entry;
42362
42420
  const entryId = typeof entry.id === "string" ? entry.id : null;
42363
42421
  if (!entryId) return entry;
42364
42422
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
42365
42423
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
42366
- const content = isRecord8(entry.content) ? entry.content : {};
42424
+ const content = isRecord9(entry.content) ? entry.content : {};
42367
42425
  const meta = {
42368
42426
  kind: "linked-content-entry",
42369
42427
  entryId,
@@ -42456,7 +42514,7 @@ function capitalize(value) {
42456
42514
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
42457
42515
  }
42458
42516
  function parsePublicContentTypeMeta(value) {
42459
- if (!isRecord8(value)) return null;
42517
+ if (!isRecord9(value)) return null;
42460
42518
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
42461
42519
  return {
42462
42520
  key: value.key,
@@ -42466,7 +42524,7 @@ function parsePublicContentTypeMeta(value) {
42466
42524
  };
42467
42525
  }
42468
42526
  function parsePublicContentTypeLinkedEntryEditing(value) {
42469
- if (!isRecord8(value) || typeof value.kind !== "string") return null;
42527
+ if (!isRecord9(value) || typeof value.kind !== "string") return null;
42470
42528
  switch (value.kind) {
42471
42529
  case "generic":
42472
42530
  return { kind: "generic" };
@@ -42480,7 +42538,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
42480
42538
  }
42481
42539
  }
42482
42540
  function parsePublicContentTypeFieldMeta(value) {
42483
- if (!isRecord8(value)) return [];
42541
+ if (!isRecord9(value)) return [];
42484
42542
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
42485
42543
  return [{
42486
42544
  id: value.id,
@@ -42494,7 +42552,7 @@ function parseStringArray(value) {
42494
42552
  if (!Array.isArray(value)) return null;
42495
42553
  return value.filter((item) => typeof item === "string");
42496
42554
  }
42497
- function isRecord8(value) {
42555
+ function isRecord9(value) {
42498
42556
  return typeof value === "object" && value !== null && !Array.isArray(value);
42499
42557
  }
42500
42558
  var LINKED_CONTENT_ENTRY_META_KEY;
@@ -45687,8 +45745,15 @@ var init_event_destination_policy = __esm({
45687
45745
  }
45688
45746
  });
45689
45747
 
45748
+ // ../api/src/event-listing-destination.ts
45749
+ var init_event_listing_destination = __esm({
45750
+ "../api/src/event-listing-destination.ts"() {
45751
+ "use strict";
45752
+ }
45753
+ });
45754
+
45690
45755
  // ../api/src/utils/isRecord.ts
45691
- function isRecord9(value) {
45756
+ function isRecord10(value) {
45692
45757
  return typeof value === "object" && value !== null && !Array.isArray(value);
45693
45758
  }
45694
45759
  var init_isRecord = __esm({
@@ -46061,7 +46126,7 @@ function sanitizeMarks(marks) {
46061
46126
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
46062
46127
  return [{ type: mark.type }];
46063
46128
  }
46064
- if (mark.type === "link" && isRecord9(mark.attrs) && typeof mark.attrs.href === "string") {
46129
+ if (mark.type === "link" && isRecord10(mark.attrs) && typeof mark.attrs.href === "string") {
46065
46130
  const attrs = { href: mark.attrs.href };
46066
46131
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
46067
46132
  attrs.target = mark.attrs.target;
@@ -46076,10 +46141,10 @@ function sanitizeMarks(marks) {
46076
46141
  return sanitized.length > 0 ? sanitized : void 0;
46077
46142
  }
46078
46143
  function unwrapRichTextValue(value) {
46079
- if (isRecord9(value) && isRecord9(value.doc)) {
46144
+ if (isRecord10(value) && isRecord10(value.doc)) {
46080
46145
  return unwrapRichTextValue(value.doc);
46081
46146
  }
46082
- if (isRecord9(value) && value.type === "doc") {
46147
+ if (isRecord10(value) && value.type === "doc") {
46083
46148
  return {
46084
46149
  type: "doc",
46085
46150
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -46088,7 +46153,7 @@ function unwrapRichTextValue(value) {
46088
46153
  return EMPTY_SITE_BANNER_BODY;
46089
46154
  }
46090
46155
  function isTipTapNodeLike(value) {
46091
- return isRecord9(value) && typeof value.type === "string";
46156
+ return isRecord10(value) && typeof value.type === "string";
46092
46157
  }
46093
46158
  function coerceTipTapNode(value) {
46094
46159
  return {
@@ -46096,9 +46161,9 @@ function coerceTipTapNode(value) {
46096
46161
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
46097
46162
  ...typeof value.text === "string" ? { text: value.text } : {},
46098
46163
  ...Array.isArray(value.marks) ? {
46099
- marks: value.marks.filter((mark) => isRecord9(mark) && typeof mark.type === "string").map((mark) => ({
46164
+ marks: value.marks.filter((mark) => isRecord10(mark) && typeof mark.type === "string").map((mark) => ({
46100
46165
  type: mark.type,
46101
- ...isRecord9(mark.attrs) ? { attrs: mark.attrs } : {}
46166
+ ...isRecord10(mark.attrs) ? { attrs: mark.attrs } : {}
46102
46167
  }))
46103
46168
  } : {}
46104
46169
  };
@@ -46411,11 +46476,20 @@ var init_dashboardSiteNav = __esm({
46411
46476
  }
46412
46477
  });
46413
46478
 
46479
+ // ../api/src/settings/permissions.ts
46480
+ var init_permissions = __esm({
46481
+ "../api/src/settings/permissions.ts"() {
46482
+ "use strict";
46483
+ init_siteMembers();
46484
+ }
46485
+ });
46486
+
46414
46487
  // ../api/src/navigation/dashboardSettingsNav.ts
46415
46488
  var hiddenDemoSettingsNavSurfaceIds, hiddenDemoSettingsNavIds;
46416
46489
  var init_dashboardSettingsNav = __esm({
46417
46490
  "../api/src/navigation/dashboardSettingsNav.ts"() {
46418
46491
  "use strict";
46492
+ init_permissions();
46419
46493
  init_visibility();
46420
46494
  init_dashboardSiteNav();
46421
46495
  hiddenDemoSettingsNavSurfaceIds = [
@@ -46498,6 +46572,7 @@ var init_navigation = __esm({
46498
46572
  init_linkUrlType();
46499
46573
  init_dashboardSiteNav();
46500
46574
  init_dashboardSettingsNav();
46575
+ init_permissions();
46501
46576
  init_dashboardTeamMemberNav();
46502
46577
  init_dashboardBookingsNav();
46503
46578
  init_identity();
@@ -46690,6 +46765,7 @@ var init_src5 = __esm({
46690
46765
  init_customerMembershipOutcomes();
46691
46766
  init_bookingVerticals();
46692
46767
  init_event_destination_policy();
46768
+ init_event_listing_destination();
46693
46769
  init_appointmentSetup();
46694
46770
  init_bookingOperations();
46695
46771
  init_bookings();
@@ -46725,6 +46801,7 @@ var init_src5 = __esm({
46725
46801
  init_linkUrlType();
46726
46802
  init_dashboardSiteNav();
46727
46803
  init_dashboardSettingsNav();
46804
+ init_permissions();
46728
46805
  init_automaticWorkflowTriggers();
46729
46806
  init_linkResolver();
46730
46807
  init_matcher();
@@ -46752,7 +46829,7 @@ var init_src5 = __esm({
46752
46829
  function isSupportedLoaderEndpoint2(endpoint) {
46753
46830
  return SUPPORTED_LOADER_ENDPOINTS.includes(endpoint);
46754
46831
  }
46755
- function isRecord10(value) {
46832
+ function isRecord11(value) {
46756
46833
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
46757
46834
  }
46758
46835
  function extractManualEntryRef(item) {
@@ -46760,7 +46837,7 @@ function extractManualEntryRef(item) {
46760
46837
  const trimmed = item.trim();
46761
46838
  return trimmed.length > 0 ? trimmed : null;
46762
46839
  }
46763
- if (!isRecord10(item)) return null;
46840
+ if (!isRecord11(item)) return null;
46764
46841
  for (const key of ENTRY_REF_KEYS) {
46765
46842
  const raw = item[key];
46766
46843
  if (typeof raw === "string" && raw.trim().length > 0) {
@@ -47142,7 +47219,7 @@ function collectMediaAssetSidecar(mediaAssets) {
47142
47219
  return Array.isArray(mediaAssets) && mediaAssets.length > 0 ? mediaAssets : void 0;
47143
47220
  }
47144
47221
  function convertPageResponseBlock(block) {
47145
- if (!isRecord11(block)) {
47222
+ if (!isRecord12(block)) {
47146
47223
  throw new Error("Invalid block format in page API response");
47147
47224
  }
47148
47225
  if (typeof block.id !== "string" && block.id !== null) {
@@ -47173,20 +47250,20 @@ function buildPageOutline(input) {
47173
47250
  blocks: input.blocks.map(convertPageResponseBlock)
47174
47251
  };
47175
47252
  }
47176
- function isRecord11(value) {
47253
+ function isRecord12(value) {
47177
47254
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
47178
47255
  }
47179
47256
  function readContentRecord(value) {
47180
- return isRecord11(value) ? value : void 0;
47257
+ return isRecord12(value) ? value : void 0;
47181
47258
  }
47182
47259
  function readNestedContentRecord(value) {
47183
- if (!isRecord11(value)) return null;
47260
+ if (!isRecord12(value)) return null;
47184
47261
  return readContentRecord(value.data) ?? null;
47185
47262
  }
47186
47263
  function sanitizeSdkRuntimeBlockContent(blockKind, content) {
47187
47264
  if (blockKind !== "block.newsletter-signup") return content;
47188
47265
  const sanitized = sanitizeNewsletterSignupPublicContent(content);
47189
- return isRecord11(sanitized) ? sanitized : {};
47266
+ return isRecord12(sanitized) ? sanitized : {};
47190
47267
  }
47191
47268
  function sanitizeNullableSdkRuntimeBlockContent(blockKind, content) {
47192
47269
  return content ? sanitizeSdkRuntimeBlockContent(blockKind, content) : null;