@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
@@ -0,0 +1,386 @@
1
+ //#region ../core/src/result.ts
2
+ function ok(value) {
3
+ return {
4
+ ok: true,
5
+ value
6
+ };
7
+ }
8
+ function err(error) {
9
+ return {
10
+ ok: false,
11
+ error
12
+ };
13
+ }
14
+ //#endregion
15
+ //#region ../core/src/booking-date-time.ts
16
+ const DEFAULT_LOCALE$1 = "en-US";
17
+ const DATE_TIME_FORMATTER_CACHE_LIMIT = 100;
18
+ const dateTimeFormatterCache$1 = /* @__PURE__ */ new Map();
19
+ const timeZoneValidityCache = /* @__PURE__ */ new Map();
20
+ function isValidTimeZone(timeZone) {
21
+ const cached = timeZoneValidityCache.get(timeZone);
22
+ if (cached !== void 0) return cached;
23
+ let isValid;
24
+ try {
25
+ new Intl.DateTimeFormat(DEFAULT_LOCALE$1, { timeZone }).format(/* @__PURE__ */ new Date());
26
+ isValid = true;
27
+ } catch {
28
+ isValid = false;
29
+ }
30
+ if (timeZoneValidityCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) timeZoneValidityCache.clear();
31
+ timeZoneValidityCache.set(timeZone, isValid);
32
+ return isValid;
33
+ }
34
+ function parseStrictBookingTimeZone(timeZone) {
35
+ if (typeof timeZone !== "string") return null;
36
+ const normalized = timeZone.trim();
37
+ if (normalized.length === 0 || !isValidTimeZone(normalized)) return null;
38
+ return normalized;
39
+ }
40
+ function formatToPartsLookup(date, locale, timeZone, format) {
41
+ return new Map(getCachedDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
42
+ }
43
+ function getCachedDateTimeFormatter(locale, timeZone, format) {
44
+ const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
45
+ const cached = dateTimeFormatterCache$1.get(key);
46
+ if (cached !== void 0) return cached;
47
+ const formatter = new Intl.DateTimeFormat(locale, {
48
+ ...format,
49
+ timeZone
50
+ });
51
+ if (dateTimeFormatterCache$1.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) dateTimeFormatterCache$1.clear();
52
+ dateTimeFormatterCache$1.set(key, formatter);
53
+ return formatter;
54
+ }
55
+ function parseUtcIsoDateTimeString(value) {
56
+ const normalized = value.trim();
57
+ const hasUtcSuffix = normalized.endsWith("Z");
58
+ const hasExplicitOffset = /[+-]\d{2}:\d{2}$/u.test(normalized);
59
+ if (!hasUtcSuffix && !hasExplicitOffset) return err("missing-timezone-offset");
60
+ const date = new Date(normalized);
61
+ if (Number.isNaN(date.getTime())) return err("invalid-date-time");
62
+ return ok(date.toISOString());
63
+ }
64
+ function toUtcIsoDateTimeString(value) {
65
+ const parsed = parseUtcIsoDateTimeString(value);
66
+ if (!parsed.ok) {
67
+ const message = parsed.error === "missing-timezone-offset" ? `Expected an offset-aware ISO datetime, received "${value}"` : `Expected a valid ISO datetime, received "${value}"`;
68
+ throw new Error(message);
69
+ }
70
+ return parsed.value;
71
+ }
72
+ function parseScheduledBookingDateTime(input) {
73
+ let startsAt;
74
+ try {
75
+ startsAt = toUtcIsoDateTimeString(input.startsAt);
76
+ } catch {
77
+ return {
78
+ ok: false,
79
+ field: "startsAt",
80
+ reason: "invalid_starts_at",
81
+ value: input.startsAt
82
+ };
83
+ }
84
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
85
+ if (timeZone === null) return {
86
+ ok: false,
87
+ field: "timeZone",
88
+ reason: "invalid_time_zone",
89
+ value: typeof input.timeZone === "string" ? input.timeZone : ""
90
+ };
91
+ return {
92
+ ok: true,
93
+ value: {
94
+ startsAt,
95
+ timeZone,
96
+ locale: input.locale
97
+ }
98
+ };
99
+ }
100
+ function parseScheduledBookingDateRange(input) {
101
+ const start = parseScheduledBookingDateTime(input);
102
+ if (!start.ok) return start;
103
+ if (input.endsAt == null) return {
104
+ ok: true,
105
+ value: start.value
106
+ };
107
+ try {
108
+ return {
109
+ ok: true,
110
+ value: {
111
+ ...start.value,
112
+ endsAt: toUtcIsoDateTimeString(input.endsAt)
113
+ }
114
+ };
115
+ } catch {
116
+ return {
117
+ ok: false,
118
+ field: "endsAt",
119
+ reason: "invalid_ends_at",
120
+ value: input.endsAt
121
+ };
122
+ }
123
+ }
124
+ /**
125
+ * Formats the compact English event-time presentation used by public surfaces.
126
+ *
127
+ * This intentionally owns the lowercase day-period token and zero-minute
128
+ * omission instead of depending on locale-specific spacing or punctuation.
129
+ * Callers must only use it for an English presentation contract.
130
+ */
131
+ function formatBookingCompactEnglishTime(input) {
132
+ const date = new Date(input.startsAt);
133
+ if (Number.isNaN(date.getTime())) return input.startsAt;
134
+ const parts = formatToPartsLookup(date, input.locale ?? "en-GB", input.timeZone, {
135
+ hour: "numeric",
136
+ minute: "2-digit",
137
+ hour12: true
138
+ });
139
+ const hour = parts.get("hour");
140
+ const minute = parts.get("minute");
141
+ const dayPeriod = parts.get("dayPeriod");
142
+ if (hour === void 0 || minute === void 0 || dayPeriod === void 0) return input.startsAt;
143
+ return `${minute === "00" ? hour : `${hour}:${minute}`}${dayPeriod.toLowerCase()}`;
144
+ }
145
+ //#endregion
146
+ //#region src/date-time/index.ts
147
+ const DEFAULT_LOCALE = "en-GB";
148
+ const COMPACT_ENGLISH_RANGE_SEPARATOR = "–";
149
+ const FORMATTER_CACHE_LIMIT = 100;
150
+ const DEFAULT_DATE_FORMAT = {
151
+ weekday: "long",
152
+ year: "numeric",
153
+ month: "long",
154
+ day: "numeric"
155
+ };
156
+ const DEFAULT_RANGE_DATE_FORMAT = {
157
+ weekday: "short",
158
+ year: "numeric",
159
+ month: "short",
160
+ day: "numeric"
161
+ };
162
+ const DEFAULT_STANDARD_TIME_FORMAT = {
163
+ hour: "numeric",
164
+ minute: "2-digit"
165
+ };
166
+ const dateTimeFormatterCache = /* @__PURE__ */ new Map();
167
+ const parsedLocaleCache = /* @__PURE__ */ new Map();
168
+ var RiverbankDateTimeFormatError = class extends Error {
169
+ constructor(details) {
170
+ super(formatErrorMessage(details));
171
+ this.name = "RiverbankDateTimeFormatError";
172
+ this.code = details.code;
173
+ this.field = details.field;
174
+ this.value = details.value;
175
+ }
176
+ };
177
+ function formatScheduledDate(input, options = {}) {
178
+ return formatInstant(parseDateTime(input), options.format ?? DEFAULT_DATE_FORMAT);
179
+ }
180
+ function formatScheduledTime(input, options = {}) {
181
+ return formatTime(parseDateTime(input), options);
182
+ }
183
+ function formatScheduledDateTime(input, options = {}) {
184
+ return formatDateTime(parseDateTime(input), options, DEFAULT_DATE_FORMAT);
185
+ }
186
+ function formatScheduledDateRange(input, options = {}) {
187
+ const range = parseDateRange(input);
188
+ return formatRange(rangeStart(range), rangeEnd(range), options.format ?? DEFAULT_RANGE_DATE_FORMAT);
189
+ }
190
+ function formatScheduledTimeRange(input, options = {}) {
191
+ const range = parseDateRange(input);
192
+ const start = rangeStart(range);
193
+ const end = rangeEnd(range);
194
+ if (!usesCompactEnglishTime(start, options)) return formatRange(start, end, resolveStandardTimeFormat(options));
195
+ const startTime = formatTime(start, options);
196
+ const endTime = formatTime(end, options);
197
+ return startTime === endTime ? startTime : `${startTime}${COMPACT_ENGLISH_RANGE_SEPARATOR}${endTime}`;
198
+ }
199
+ function formatScheduledDateTimeRange(input, options = {}) {
200
+ const range = parseDateRange(input);
201
+ const start = rangeStart(range);
202
+ const end = rangeEnd(range);
203
+ if (!usesCompactEnglishTime(start, options.time ?? {})) return formatRange(start, end, resolveCombinedFormat(options, DEFAULT_RANGE_DATE_FORMAT));
204
+ const startDate = formatInstant(start, options.dateFormat ?? DEFAULT_RANGE_DATE_FORMAT);
205
+ const startTime = formatTime(start, options.time ?? {});
206
+ const endTime = formatTime(end, options.time ?? {});
207
+ const startDateTime = `${startDate}, ${startTime}`;
208
+ if (sameLocalDate(start, end)) return startTime === endTime ? startDateTime : `${startDate}, ${startTime}${COMPACT_ENGLISH_RANGE_SEPARATOR}${endTime}`;
209
+ const endDateTime = `${formatInstant(end, options.dateFormat ?? DEFAULT_RANGE_DATE_FORMAT)}, ${endTime}`;
210
+ return startDateTime === endDateTime ? startDateTime : `${startDateTime}${COMPACT_ENGLISH_RANGE_SEPARATOR}${endDateTime}`;
211
+ }
212
+ function parseDateTime(input) {
213
+ const locale = parseLocale(input.locale);
214
+ assertStringTimeZone(input.timeZone);
215
+ const result = parseScheduledBookingDateTime({
216
+ ...input,
217
+ locale: locale.locale
218
+ });
219
+ if (result.ok) return {
220
+ ...result.value,
221
+ locale: locale.locale
222
+ };
223
+ throw fromCoreParseError(result);
224
+ }
225
+ function parseDateRange(input) {
226
+ const locale = parseLocale(input.locale);
227
+ assertStringTimeZone(input.timeZone);
228
+ if (input.endsAt === null || input.endsAt === void 0) throw new RiverbankDateTimeFormatError({
229
+ code: "missing_ends_at",
230
+ field: "endsAt",
231
+ value: ""
232
+ });
233
+ const result = parseScheduledBookingDateRange({
234
+ ...input,
235
+ locale: locale.locale
236
+ });
237
+ if (!result.ok) throw fromCoreParseError(result);
238
+ if (result.value.endsAt === null || result.value.endsAt === void 0) throw new RiverbankDateTimeFormatError({
239
+ code: "missing_ends_at",
240
+ field: "endsAt",
241
+ value: ""
242
+ });
243
+ if (new Date(result.value.endsAt).getTime() < new Date(result.value.startsAt).getTime()) throw new RiverbankDateTimeFormatError({
244
+ code: "end_before_start",
245
+ field: "endsAt",
246
+ value: input.endsAt
247
+ });
248
+ return {
249
+ ...result.value,
250
+ endsAt: result.value.endsAt,
251
+ locale: locale.locale
252
+ };
253
+ }
254
+ function parseLocale(value) {
255
+ const locale = value === void 0 ? DEFAULT_LOCALE : value;
256
+ if (typeof locale !== "string") throw new RiverbankDateTimeFormatError({
257
+ code: "invalid_locale",
258
+ field: "locale",
259
+ value: ""
260
+ });
261
+ const cached = parsedLocaleCache.get(locale);
262
+ if (cached !== void 0) return cached;
263
+ try {
264
+ const parsed = new Intl.Locale(locale);
265
+ const canonical = parsed.toString();
266
+ if (Intl.DateTimeFormat.supportedLocalesOf([canonical]).length === 0) throw new RangeError("Unsupported locale");
267
+ const result = {
268
+ locale: canonical,
269
+ language: parsed.language
270
+ };
271
+ if (parsedLocaleCache.size >= FORMATTER_CACHE_LIMIT) parsedLocaleCache.clear();
272
+ parsedLocaleCache.set(locale, result);
273
+ return result;
274
+ } catch {
275
+ throw new RiverbankDateTimeFormatError({
276
+ code: "invalid_locale",
277
+ field: "locale",
278
+ value: typeof value === "string" ? value : ""
279
+ });
280
+ }
281
+ }
282
+ function assertStringTimeZone(value) {
283
+ if (typeof value !== "string") throw new RiverbankDateTimeFormatError({
284
+ code: "invalid_time_zone",
285
+ field: "timeZone",
286
+ value: ""
287
+ });
288
+ }
289
+ function fromCoreParseError(error) {
290
+ switch (error.reason) {
291
+ case "invalid_starts_at": return new RiverbankDateTimeFormatError({
292
+ code: error.reason,
293
+ field: error.field,
294
+ value: typeof error.value === "string" ? error.value : ""
295
+ });
296
+ case "invalid_ends_at": return new RiverbankDateTimeFormatError({
297
+ code: error.reason,
298
+ field: error.field,
299
+ value: typeof error.value === "string" ? error.value : ""
300
+ });
301
+ case "invalid_time_zone": return new RiverbankDateTimeFormatError({
302
+ code: error.reason,
303
+ field: error.field,
304
+ value: error.value
305
+ });
306
+ default: return assertNever(error);
307
+ }
308
+ }
309
+ function formatErrorMessage(details) {
310
+ switch (details.code) {
311
+ case "invalid_starts_at": return `Expected startsAt to be a valid offset-aware ISO datetime, received "${details.value}"`;
312
+ case "invalid_ends_at": return `Expected endsAt to be a valid offset-aware ISO datetime, received "${details.value}"`;
313
+ case "missing_ends_at": return "Expected endsAt to be provided for a scheduled range";
314
+ case "invalid_time_zone": return `Expected timeZone to be a valid IANA timezone, received "${details.value}"`;
315
+ case "invalid_locale": return `Expected locale to be a supported BCP 47 locale, received "${details.value}"`;
316
+ case "end_before_start": return `Expected endsAt to be on or after startsAt, received "${details.value}"`;
317
+ default: return assertNever(details);
318
+ }
319
+ }
320
+ function formatDateTime(input, options, defaultDateFormat) {
321
+ if (!usesCompactEnglishTime(input, options.time ?? {})) return formatInstant(input, resolveCombinedFormat(options, defaultDateFormat));
322
+ return `${formatInstant(input, options.dateFormat ?? defaultDateFormat)}, ${formatTime(input, options.time ?? {})}`;
323
+ }
324
+ function formatTime(input, options) {
325
+ if (usesCompactEnglishTime(input, options)) return formatBookingCompactEnglishTime(input);
326
+ return formatInstant(input, resolveStandardTimeFormat(options));
327
+ }
328
+ function usesCompactEnglishTime(input, options) {
329
+ return options.timePresentation !== "standard" && parseLocale(input.locale).language === "en";
330
+ }
331
+ function resolveStandardTimeFormat(options) {
332
+ return options.timePresentation === "standard" ? options.format ?? DEFAULT_STANDARD_TIME_FORMAT : DEFAULT_STANDARD_TIME_FORMAT;
333
+ }
334
+ function resolveCombinedFormat(options, defaultDateFormat) {
335
+ return {
336
+ ...options.dateFormat ?? defaultDateFormat,
337
+ ...resolveStandardTimeFormat(options.time ?? {})
338
+ };
339
+ }
340
+ function formatInstant(input, format) {
341
+ return getFormatter(input, format).format(new Date(input.startsAt));
342
+ }
343
+ function formatRange(start, end, format) {
344
+ const formatter = getFormatter(start, format);
345
+ const nativeFormatRange = Reflect.get(formatter, "formatRange");
346
+ if (typeof nativeFormatRange !== "function") throw new Error("Intl.DateTimeFormat.formatRange is required");
347
+ const output = Reflect.apply(nativeFormatRange, formatter, [new Date(start.startsAt), new Date(end.startsAt)]);
348
+ if (typeof output !== "string") throw new Error("Intl.DateTimeFormat.formatRange returned a non-string value");
349
+ return output;
350
+ }
351
+ function getFormatter(input, format) {
352
+ const formatKey = JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)));
353
+ const key = `${input.locale}\u0000${input.timeZone}\u0000${formatKey}`;
354
+ const cached = dateTimeFormatterCache.get(key);
355
+ if (cached !== void 0) return cached;
356
+ const formatter = new Intl.DateTimeFormat(input.locale, {
357
+ ...format,
358
+ timeZone: input.timeZone
359
+ });
360
+ if (dateTimeFormatterCache.size >= FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
361
+ dateTimeFormatterCache.set(key, formatter);
362
+ return formatter;
363
+ }
364
+ function rangeStart(range) {
365
+ return range;
366
+ }
367
+ function rangeEnd(range) {
368
+ return {
369
+ startsAt: range.endsAt,
370
+ timeZone: range.timeZone,
371
+ locale: range.locale
372
+ };
373
+ }
374
+ function sameLocalDate(start, end) {
375
+ const format = {
376
+ year: "numeric",
377
+ month: "2-digit",
378
+ day: "2-digit"
379
+ };
380
+ return formatInstant(start, format) === formatInstant(end, format);
381
+ }
382
+ function assertNever(value) {
383
+ throw new Error(`Unhandled date-time variant: ${String(value)}`);
384
+ }
385
+ //#endregion
386
+ export { RiverbankDateTimeFormatError, formatScheduledDate, formatScheduledDateRange, formatScheduledDateTime, formatScheduledDateTimeRange, formatScheduledTime, formatScheduledTimeRange };
@@ -6309,6 +6309,41 @@ const API_ENDPOINTS$1 = {
6309
6309
  auth: "service",
6310
6310
  responseKind: "json"
6311
6311
  },
6312
+ sdkCatalogTheme: {
6313
+ path: "/sdk/{siteId}/catalog/theme",
6314
+ method: "GET",
6315
+ errors: ["server:internal_error"],
6316
+ auth: "service",
6317
+ responseKind: "json"
6318
+ },
6319
+ sdkCatalogBlocks: {
6320
+ path: "/sdk/{siteId}/catalog/blocks",
6321
+ method: "GET",
6322
+ errors: ["server:internal_error"],
6323
+ auth: "service",
6324
+ responseKind: "json"
6325
+ },
6326
+ sdkCatalogContentTypes: {
6327
+ path: "/sdk/{siteId}/catalog/content-types",
6328
+ method: "GET",
6329
+ errors: ["server:internal_error"],
6330
+ auth: "service",
6331
+ responseKind: "json"
6332
+ },
6333
+ sdkCapabilities: {
6334
+ path: "/sdk/{siteId}/capabilities",
6335
+ method: "GET",
6336
+ errors: ["server:internal_error"],
6337
+ auth: "service",
6338
+ responseKind: "json"
6339
+ },
6340
+ sdkListDemoContent: {
6341
+ path: "/sdk/{siteId}/demo-content",
6342
+ method: "GET",
6343
+ errors: ["server:internal_error"],
6344
+ auth: "service",
6345
+ responseKind: "json"
6346
+ },
6312
6347
  sdkPullPages: {
6313
6348
  path: "/sdk/{siteId}/pull/pages",
6314
6349
  method: "GET",
@@ -7726,7 +7761,7 @@ var SimpleCache = class {
7726
7761
  * 1. This constant
7727
7762
  * 2. The "version" field in package.json
7728
7763
  */
7729
- const SDK_VERSION = "0.108.0";
7764
+ const SDK_VERSION = "0.109.0";
7730
7765
  //#endregion
7731
7766
  //#region src/client/error.ts
7732
7767
  let _Symbol$for;