@riverbankcms/sdk 0.108.0 → 0.109.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 (189) hide show
  1. package/README.md +21 -1
  2. package/dist/{PreviewEditorSidebar-BBT-kZAM.mjs → PreviewEditorSidebar-DWqwfy3_.mjs} +7 -22
  3. package/dist/{PreviewEditorUI-D69xNKT2.mjs → PreviewEditorUI-B7OL4sfR.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-RRu7wyQ5.mjs → PreviewQueryProvider-D0y2l8JN.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CuDjXH6o.mjs → SdkPreviewModeRuntime-D8Gt9Gbe.mjs} +212 -153
  6. package/dist/{SiteChromeCustomizeContext-BQUY2dEk.mjs → SiteChromeCustomizeContext-DUpalEdL.mjs} +1919 -1032
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +11244 -10741
  8. package/dist/_dts/api/src/bookingAdjustments.d.ts +5 -0
  9. package/dist/_dts/api/src/bookingOperations.d.ts +4 -0
  10. package/dist/_dts/api/src/bookingRecords.d.ts +2 -17
  11. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +6 -6
  12. package/dist/_dts/api/src/common/envelope.d.ts +7 -0
  13. package/dist/_dts/api/src/courses.d.ts +1 -0
  14. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +5 -5
  15. package/dist/_dts/api/src/endpoints.d.ts +35 -0
  16. package/dist/_dts/api/src/index.d.ts +2 -2
  17. package/dist/_dts/api/src/participantMessaging.d.ts +18 -12
  18. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  19. package/dist/_dts/api/src/sdkContracts.d.ts +247 -1
  20. package/dist/_dts/api/src/siteInfrastructure.d.ts +13 -0
  21. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +1 -5
  22. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +29 -1
  23. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +33 -27
  24. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +9 -0
  25. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +3 -4
  26. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  27. package/dist/_dts/blocks/src/index.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +3 -0
  29. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +3 -0
  30. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +3 -0
  31. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +1 -22
  32. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +3 -0
  33. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -22
  34. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +3 -0
  35. package/dist/_dts/blocks/src/system/blocks/form.d.ts +3 -0
  36. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -0
  38. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +3 -0
  39. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +3 -0
  40. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  41. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +3 -0
  42. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +3 -0
  43. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  44. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +16 -6
  45. package/dist/_dts/blocks/src/system/defineBlock.d.ts +9 -1
  46. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +8 -0
  47. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +31 -0
  48. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  49. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  50. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -1
  51. package/dist/_dts/content-model/src/content-types/entryValidation.d.ts +31 -0
  52. package/dist/_dts/content-model/src/content-types/scaffold.d.ts +58 -0
  53. package/dist/_dts/content-model/src/content-types/sentinels.d.ts +36 -0
  54. package/dist/_dts/content-model/src/index.d.ts +3 -0
  55. package/dist/_dts/core/src/booking-date-time.d.ts +8 -0
  56. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3071 -3157
  57. package/dist/_dts/media-core/src/fileMimeDetection.d.ts +16 -0
  58. package/dist/_dts/media-core/src/fileStorage.d.ts +8 -0
  59. package/dist/_dts/media-core/src/storagePathDomain.d.ts +2 -0
  60. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +3 -0
  61. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +2 -0
  62. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
  63. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -1
  64. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +1 -1
  65. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +1 -1
  66. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +1 -1
  67. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +18 -0
  68. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +15 -0
  69. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +2 -2
  70. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +1 -1
  71. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -0
  72. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +1 -1
  73. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +3 -0
  74. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +12 -1
  75. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +1 -0
  76. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +1 -0
  77. package/dist/_dts/sdk/src/cli/helpers.d.ts +22 -1
  78. package/dist/_dts/sdk/src/cli/index.d.ts +4 -0
  79. package/dist/_dts/sdk/src/cli/output.d.ts +88 -0
  80. package/dist/_dts/sdk/src/cli/program.d.ts +29 -0
  81. package/dist/_dts/sdk/src/cli/push-config.d.ts +1 -1
  82. package/dist/_dts/sdk/src/client/management/catalog.d.ts +10 -0
  83. package/dist/_dts/sdk/src/client/management/http.d.ts +7 -1
  84. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  85. package/dist/_dts/sdk/src/client/management/types.d.ts +43 -19
  86. package/dist/_dts/sdk/src/date-time/index.d.ts +68 -0
  87. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -0
  88. package/dist/_dts/sdk/src/version.d.ts +1 -1
  89. package/dist/_dts/site-commands/src/commands.d.ts +893 -823
  90. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/buttons/core.d.ts +15 -46
  92. package/dist/_dts/theme-core/src/buttons/effectClassification.d.ts +147 -0
  93. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +2 -3
  94. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +1 -1
  95. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  96. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +44 -32
  97. package/dist/_dts/theme-core/src/buttons/presets.d.ts +4 -25
  98. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +100 -0
  99. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +16 -0
  100. package/dist/_dts/theme-core/src/buttons/types.d.ts +101 -83
  101. package/dist/_dts/theme-core/src/cards/types.d.ts +16 -16
  102. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  103. package/dist/_dts/theme-core/src/gradients/presets.d.ts +200 -8
  104. package/dist/_dts/theme-core/src/gradients/utils.d.ts +6 -2
  105. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +87 -126
  106. package/dist/_dts/theme-core/src/mock-themes/modern-minimal.d.ts +1 -1
  107. package/dist/_dts/theme-core/src/navigation/types.d.ts +2 -2
  108. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +2 -2
  109. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +5 -8
  110. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -1
  111. package/dist/_dts/theme-core/src/schema.d.ts +112 -138
  112. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  113. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +10 -10
  114. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -2
  115. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +13 -6
  116. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +29 -8
  117. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +2 -2
  118. package/dist/cli/index.mjs +67956 -66745
  119. package/dist/cli/init-docs/content/cli-reference.md +50 -7
  120. package/dist/cli/init-docs/content/content-management.md +7 -4
  121. package/dist/cli/init-docs/content/workflow-publish.md +5 -1
  122. package/dist/client/{DiscountCodeDisclosure-D6TOf6Hi.mjs → DiscountCodeDisclosure-DU1ygxU2.mjs} +1 -1
  123. package/dist/client/{EventCombined.client-Dao3zxRk.mjs → EventCombined.client-DB5zagCo.mjs} +3 -3
  124. package/dist/client/{EventListing.client-B2NNt4y1.mjs → EventListing.client-CTX9JHBL.mjs} +2 -2
  125. package/dist/client/{LeafletStaticMap-BhwFo16w.mjs → LeafletStaticMap-BYImhgiB.mjs} +1 -1
  126. package/dist/client/{MagicLinkForm-BWnB7cMR.mjs → MagicLinkForm-CRkw_M3l.mjs} +2 -2
  127. package/dist/client/{StepIndicator-TzRiQ0BY.mjs → StepIndicator-BnmVBJJh.mjs} +2 -2
  128. package/dist/client/{accordion-BPy-AJ4_.mjs → accordion-CeGreumd.mjs} +1 -1
  129. package/dist/client/{bookingForm-BL4PGZds.mjs → bookingForm-CSzFNrpN.mjs} +6 -6
  130. package/dist/client/bookings.mjs +512 -252
  131. package/dist/client/{buttons-EBjyslaX.mjs → buttons-DoFV7KDL.mjs} +493 -230
  132. package/dist/client/{carousel-C2b7Cn9-.mjs → carousel-B2jDtogf.mjs} +1 -1
  133. package/dist/client/{cart-BQcbXIVD.mjs → cart-D-jZ-vaY.mjs} +3 -3
  134. package/dist/client/{checkout-DEmpGRJu.mjs → checkout-Dza-LA7N.mjs} +3 -3
  135. package/dist/client/client.mjs +1673 -785
  136. package/dist/client/{colorStyles-jZS6KfkP.mjs → colorStyles-CrgzoXsm.mjs} +1 -30
  137. package/dist/client/{courseRegistration-BqRZPmsq.mjs → courseRegistration-TYkNychb.mjs} +7 -7
  138. package/dist/client/{eventCalendar-B8N_tSl5.mjs → eventCalendar-BI_90SsT.mjs} +5 -5
  139. package/dist/client/{eventCombined-Gjn6gtq7.mjs → eventCombined-mNrpryE9.mjs} +2 -2
  140. package/dist/client/{eventDetails-M-VCxA-r.mjs → eventDetails-D4GVlCIY.mjs} +3 -3
  141. package/dist/client/{eventListing-DR19hqYi.mjs → eventListing-YhKN018y.mjs} +2 -2
  142. package/dist/client/{eventRegistration-BR02a0k3.mjs → eventRegistration-CdHGtilr.mjs} +7 -7
  143. package/dist/client/foregroundContract-xICPq59x.mjs +31 -0
  144. package/dist/client/{form-LY2xIbwg.mjs → form-AcAL45rA.mjs} +2 -2
  145. package/dist/client/{headerSection-CYwwXJfh.mjs → headerSection-uEC52ueD.mjs} +3 -3
  146. package/dist/client/hooks.mjs +890 -497
  147. package/dist/client/{locationMap-DWnBXrFq.mjs → locationMap-_wJDSUYe.mjs} +3 -3
  148. package/dist/client/{media-DHtSxS5V.mjs → media-BK0O3b-U.mjs} +3 -2
  149. package/dist/client/{newsletterForm-D9s-fQ2P.mjs → newsletterForm-DrArsb2B.mjs} +2 -2
  150. package/dist/client/{pricing-DDq80oYc.mjs → pricing-BSYVghwo.mjs} +1 -1
  151. package/dist/client/{productDetail-B0SbWd45.mjs → productDetail-Dyk90sMs.mjs} +3 -3
  152. package/dist/client/{productList-PwYlZn0y.mjs → productList-BCKThwAI.mjs} +3 -3
  153. package/dist/client/{propsDecoder-BRWBiH7i.mjs → propsDecoder-CkXxkdSR.mjs} +63 -24
  154. package/dist/client/rendering/client.mjs +1034 -486
  155. package/dist/client/rendering/islands.mjs +19 -19
  156. package/dist/client/rendering.mjs +1832 -760
  157. package/dist/client/{shop-CMwZPYME.mjs → shop-DeltVH10.mjs} +6 -6
  158. package/dist/client/{shop-commerce-BuxsFate.mjs → shop-commerce-BD9Jsm2Z.mjs} +6 -6
  159. package/dist/client/{shop-commerce-store-boYlEJ91.mjs → shop-commerce-store-CmXD6FDS.mjs} +1 -1
  160. package/dist/client/{shopShared-D2naaOes.mjs → shopShared-B8v-lH_F.mjs} +2 -2
  161. package/dist/client/{useDiscountCodeUi-D9RHpVoj.mjs → useDiscountCodeUi-DbWJN8ld.mjs} +1 -1
  162. package/dist/client/{useEventFilters-igGiK1re.mjs → useEventFilters-EJIMUnqT.mjs} +46 -69
  163. package/dist/client/{usePolling-CI7MbsFB.mjs → usePolling-Cmh14fc7.mjs} +2 -2
  164. package/dist/preview-next/before-render.mjs +35 -0
  165. package/dist/preview-next/client/runtime.mjs +4 -4
  166. package/dist/preview-next/middleware.mjs +35 -0
  167. package/dist/{previewAuthStore-a_cBD28m.mjs → previewAuthStore-CTO7CRPk.mjs} +35 -0
  168. package/dist/{sdk-runtime-MBzD-GmP.mjs → sdk-runtime-Dou0GAav.mjs} +2 -2
  169. package/dist/{separator-5ahRBC85.mjs → separator-CI5wZNXT.mjs} +1 -1
  170. package/dist/server/components.mjs +1832 -784
  171. package/dist/server/config-validation.mjs +890 -497
  172. package/dist/server/config.mjs +890 -497
  173. package/dist/server/data.mjs +890 -497
  174. package/dist/server/date-time.mjs +386 -0
  175. package/dist/server/index.mjs +36 -1
  176. package/dist/server/next.mjs +1868 -785
  177. package/dist/server/page-converter.mjs +849 -285
  178. package/dist/server/prebuild.mjs +1 -1
  179. package/dist/server/rendering/server.mjs +1553 -718
  180. package/dist/server/rendering.mjs +1832 -784
  181. package/dist/server/routing.mjs +933 -522
  182. package/dist/server/server.mjs +929 -501
  183. package/dist/server/theme-bridge.mjs +1408 -392
  184. package/dist/server/theme.mjs +471 -228
  185. package/dist/styles/index.css +5 -0
  186. package/package.json +7 -1
  187. package/dist/_dts/theme-core/src/buttons/presets/types.d.ts +0 -88
  188. package/dist/_dts/theme-core/src/buttons/utils/contrast.d.ts +0 -38
  189. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +0 -57
@@ -1,7 +1,7 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BRWBiH7i.mjs";
2
- import { a as textColorStyle, n as borderColorStyle, r as mergeStyles, t as backgroundColorStyle } from "./colorStyles-jZS6KfkP.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CkXxkdSR.mjs";
2
+ import { a as textColorStyle, n as borderColorStyle, r as mergeStyles, t as backgroundColorStyle } from "./colorStyles-CrgzoXsm.mjs";
3
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
4
- import { t as LeafletStaticMap } from "./LeafletStaticMap-BhwFo16w.mjs";
4
+ import { t as LeafletStaticMap } from "./LeafletStaticMap-BYImhgiB.mjs";
5
5
  import "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region ../core/src/location.ts
@@ -1,6 +1,6 @@
1
1
  import { t as clsx } from "./clsx-DgIEfj3H.mjs";
2
2
  import { d as unsafeAsMediaAssetId, g as ok$1, h as err, i as resolveMediaTransformForAspect, m as unsafeAsStoragePath, n as isExplicitRectCrop, p as unsafeAsStorageBucketName, r as parseAspectRatioValue } from "./colorTokenParts-CMugwvX_.mjs";
3
- import { a as textColorStyle, r as mergeStyles, t as backgroundColorStyle } from "./colorStyles-jZS6KfkP.mjs";
3
+ import { a as textColorStyle, r as mergeStyles, t as backgroundColorStyle } from "./colorStyles-CrgzoXsm.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../media-core/src/fileSafety.ts
@@ -54,7 +54,8 @@ function validateRelativeStoragePath(value) {
54
54
  if (value.startsWith("sites/")) return fail({ tag: "SITE_SCOPED_PATH" });
55
55
  if (value.startsWith("/")) return fail({ tag: "LEADING_SLASH" });
56
56
  if (value.includes("//")) return fail({ tag: "DOUBLE_SLASH" });
57
- if (value.split("/").some((segment) => segment === "..")) return fail({ tag: "TRAVERSAL" });
57
+ if (value.includes("%")) return fail({ tag: "PERCENT_ENCODING" });
58
+ if (value.split("/").some((segment) => segment === "." || segment === "..")) return fail({ tag: "TRAVERSAL" });
58
59
  return ok(value);
59
60
  }
60
61
  function brandRelativeStoragePath(value) {
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { t as clsx } from "./clsx-DgIEfj3H.mjs";
3
- import { _t as assertNever, t as defineIslandPropsDecoder } from "./propsDecoder-BRWBiH7i.mjs";
3
+ import { _t as assertNever, t as defineIslandPropsDecoder } from "./propsDecoder-CkXxkdSR.mjs";
4
4
  import { n as useBlockApi, t as BlockApiProvider } from "./context-BGZNlGXB.mjs";
5
5
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
6
- import { t as themeButtonClassName } from "./buttons-EBjyslaX.mjs";
6
+ import { r as themeButtonClassName } from "./buttons-DoFV7KDL.mjs";
7
7
  import { t as FeedbackMessage } from "./FeedbackMessage-ByMrs3cr.mjs";
8
8
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
9
9
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
@@ -1,4 +1,4 @@
1
- import { It as formatBookingPriceDisplay } from "./propsDecoder-BRWBiH7i.mjs";
1
+ import { It as formatBookingPriceDisplay } from "./propsDecoder-CkXxkdSR.mjs";
2
2
  //#region ../core/src/planner.ts
3
3
  /** Default clock for production callers that do not inject time explicitly. */
4
4
  const systemPlanningClock = { now: () => Date.now() };
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BRWBiH7i.mjs";
2
- import { r as ProductDetailController } from "./shop-commerce-BuxsFate.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-D2naaOes.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CkXxkdSR.mjs";
2
+ import { r as ProductDetailController } from "./shop-commerce-BD9Jsm2Z.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-B8v-lH_F.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/product-detail.client.tsx
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BRWBiH7i.mjs";
2
- import { i as ProductListController } from "./shop-commerce-BuxsFate.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-D2naaOes.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CkXxkdSR.mjs";
2
+ import { i as ProductListController } from "./shop-commerce-BD9Jsm2Z.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-B8v-lH_F.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/product-list.client.tsx
@@ -201,19 +201,29 @@ const DEFAULT_BOOKING_DATE_TIME_FORMAT = {
201
201
  minute: "2-digit"
202
202
  };
203
203
  const LOCAL_DATE_PATTERN = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
204
+ const DATE_TIME_FORMATTER_CACHE_LIMIT = 100;
205
+ const dateTimeFormatterCache = /* @__PURE__ */ new Map();
206
+ const timeZoneValidityCache = /* @__PURE__ */ new Map();
204
207
  function isValidTimeZone$1(timeZone) {
208
+ const cached = timeZoneValidityCache.get(timeZone);
209
+ if (cached !== void 0) return cached;
210
+ let isValid;
205
211
  try {
206
212
  new Intl.DateTimeFormat(DEFAULT_LOCALE, { timeZone }).format(/* @__PURE__ */ new Date());
207
- return true;
213
+ isValid = true;
208
214
  } catch {
209
- return false;
215
+ isValid = false;
210
216
  }
217
+ if (timeZoneValidityCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) timeZoneValidityCache.clear();
218
+ timeZoneValidityCache.set(timeZone, isValid);
219
+ return isValid;
211
220
  }
212
221
  function getSafeTimeZone(timeZone) {
213
222
  const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
214
223
  return normalized.length > 0 && isValidTimeZone$1(normalized) ? normalized : FALLBACK_TIMEZONE;
215
224
  }
216
225
  function parseStrictBookingTimeZone(timeZone) {
226
+ if (typeof timeZone !== "string") return null;
217
227
  const normalized = timeZone.trim();
218
228
  if (normalized.length === 0 || !isValidTimeZone$1(normalized)) return null;
219
229
  return normalized;
@@ -226,10 +236,19 @@ function formatParseError(error) {
226
236
  }
227
237
  }
228
238
  function formatToPartsLookup(date, locale, timeZone, format) {
229
- return new Map(new Intl.DateTimeFormat(locale, {
239
+ return new Map(getCachedDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
240
+ }
241
+ function getCachedDateTimeFormatter(locale, timeZone, format) {
242
+ const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
243
+ const cached = dateTimeFormatterCache.get(key);
244
+ if (cached !== void 0) return cached;
245
+ const formatter = new Intl.DateTimeFormat(locale, {
230
246
  ...format,
231
247
  timeZone
232
- }).formatToParts(date).map((part) => [part.type, part.value]));
248
+ });
249
+ if (dateTimeFormatterCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
250
+ dateTimeFormatterCache.set(key, formatter);
251
+ return formatter;
233
252
  }
234
253
  function getZonedDateTimeParts(date, timeZone) {
235
254
  const parts = formatToPartsLookup(date, "en-GB", timeZone, {
@@ -282,23 +301,9 @@ function toUtcIsoDateTimeString(value) {
282
301
  return parsed.value;
283
302
  }
284
303
  function parseScheduledBookingDateTime(input) {
304
+ let startsAt;
285
305
  try {
286
- const startsAt = toUtcIsoDateTimeString(input.startsAt);
287
- const timeZone = parseStrictBookingTimeZone(input.timeZone);
288
- if (timeZone === null) return {
289
- ok: false,
290
- field: "timeZone",
291
- reason: "invalid_time_zone",
292
- value: input.timeZone
293
- };
294
- return {
295
- ok: true,
296
- value: {
297
- startsAt,
298
- timeZone,
299
- locale: input.locale
300
- }
301
- };
306
+ startsAt = toUtcIsoDateTimeString(input.startsAt);
302
307
  } catch {
303
308
  return {
304
309
  ok: false,
@@ -307,6 +312,21 @@ function parseScheduledBookingDateTime(input) {
307
312
  value: input.startsAt
308
313
  };
309
314
  }
315
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
316
+ if (timeZone === null) return {
317
+ ok: false,
318
+ field: "timeZone",
319
+ reason: "invalid_time_zone",
320
+ value: typeof input.timeZone === "string" ? input.timeZone : ""
321
+ };
322
+ return {
323
+ ok: true,
324
+ value: {
325
+ startsAt,
326
+ timeZone,
327
+ locale: input.locale
328
+ }
329
+ };
310
330
  }
311
331
  function parseScheduledBookingDateRange(input) {
312
332
  const start = parseScheduledBookingDateTime(input);
@@ -345,10 +365,7 @@ function toScheduledBookingDateRange(input) {
345
365
  function formatBookingInstant(isoString, options) {
346
366
  const date = new Date(isoString);
347
367
  if (Number.isNaN(date.getTime())) return isoString;
348
- return new Intl.DateTimeFormat(options.locale ?? DEFAULT_LOCALE, {
349
- ...options.format,
350
- timeZone: getSafeTimeZone(options.timeZone)
351
- }).format(date);
368
+ return getCachedDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
352
369
  }
353
370
  function formatBookingDate(input, format = {
354
371
  weekday: "long",
@@ -4450,6 +4467,20 @@ const blockCategoryEnum = z$1.enum([
4450
4467
  "layout",
4451
4468
  "interactive"
4452
4469
  ]);
4470
+ const blockContentSourceSchema = z$1.object({
4471
+ kind: z$1.enum([
4472
+ "inline",
4473
+ "entries",
4474
+ "mixed"
4475
+ ]),
4476
+ contentType: z$1.string().min(1).optional()
4477
+ }).superRefine((value, ctx) => {
4478
+ if (value.kind === "inline" && value.contentType) ctx.addIssue({
4479
+ code: z$1.ZodIssueCode.custom,
4480
+ path: ["contentType"],
4481
+ message: "contentType is not allowed when contentSource.kind is \"inline\""
4482
+ });
4483
+ });
4453
4484
  z$1.object({
4454
4485
  name: z$1.string().min(1),
4455
4486
  version: z$1.string().min(1),
@@ -4480,6 +4511,12 @@ z$1.object({
4480
4511
  }).optional()).optional(),
4481
4512
  category: blockCategoryEnum.optional(),
4482
4513
  contentTypes: z$1.array(z$1.string()).optional(),
4514
+ /**
4515
+ * Explicit content-source classification (inline / entries / mixed). Optional at the
4516
+ * schema level for backward compatibility with SDK-defined custom blocks, but every
4517
+ * registered SYSTEM block must declare it (enforced by a registry-wide test).
4518
+ */
4519
+ contentSource: blockContentSourceSchema.optional(),
4483
4520
  tags: z$1.array(z$1.string()).optional(),
4484
4521
  icon: z$1.string().optional()
4485
4522
  });
@@ -5515,6 +5552,7 @@ function createBlockManifest(config) {
5515
5552
  previewCustomize: config.previewCustomize,
5516
5553
  category: config.category,
5517
5554
  contentTypes: config.contentTypes ? [...config.contentTypes] : void 0,
5555
+ contentSource: config.contentSource,
5518
5556
  tags: config.tags ? [...config.tags] : [],
5519
5557
  icon: config.icon ?? "Box",
5520
5558
  layout,
@@ -5551,6 +5589,7 @@ createBlockManifest({
5551
5589
  titleSource: "heading",
5552
5590
  description: "Date/time, venue, map, and other dates for an event",
5553
5591
  category: "content",
5592
+ contentSource: { kind: "entries" },
5554
5593
  tags: [
5555
5594
  "events",
5556
5595
  "venue",