@riverbankcms/sdk 0.104.1 → 0.107.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 (265) hide show
  1. package/README.md +84 -51
  2. package/dist/{PreviewEditorSidebar-CmaPXdKu.mjs → PreviewEditorSidebar-DpAbAl08.mjs} +1811 -1179
  3. package/dist/{PreviewEditorUI-C5xRTh2b.mjs → PreviewEditorUI-O7cn6Xxv.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-CStABBUh.mjs → PreviewQueryProvider-D0tnKl0t.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Eks51NcN.mjs → SdkPreviewModeRuntime-CVB7urtl.mjs} +3244 -528
  6. package/dist/{SiteChromeCustomizeContext-Bt8zb3qu.mjs → SiteChromeCustomizeContext-C_sizso-.mjs} +4945 -3010
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +32945 -1329
  8. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  9. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +5 -1
  10. package/dist/_dts/api/src/contentRuntime.d.ts +6 -15
  11. package/dist/_dts/api/src/courses.d.ts +68 -10
  12. package/dist/_dts/api/src/endpoints.d.ts +29 -0
  13. package/dist/_dts/api/src/index.d.ts +124 -124
  14. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +9 -0
  15. package/dist/_dts/api/src/sdkContracts.d.ts +116 -6
  16. package/dist/_dts/api/src/siteOperations.d.ts +1 -0
  17. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +26 -4
  18. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +31 -46
  19. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +36 -4
  20. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  21. package/dist/_dts/blocks/src/portal/types.d.ts +25 -7
  22. package/dist/_dts/blocks/src/primitives/layout/Grid.d.ts +12 -8
  23. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +2 -2
  24. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +7 -0
  27. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule-projection.d.ts +52 -0
  28. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule.d.ts +22 -0
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +11 -1
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +45 -0
  31. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +10 -0
  32. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -1
  33. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  34. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +9 -0
  35. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +8 -2
  36. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +8 -8
  37. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +24 -24
  38. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +29 -0
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  41. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  42. package/dist/_dts/blocks/src/system/constants/events.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +2 -5
  44. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +1 -0
  46. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +2 -2
  47. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +12 -0
  48. package/dist/_dts/blocks/src/system/node/fragments/styledCard.d.ts +3 -0
  49. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  51. package/dist/_dts/blocks/src/system/runtime/blockComposition.d.ts +2 -0
  52. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +90 -6
  53. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +45 -3
  54. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +15 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/buttonAffordance.d.ts +33 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +2 -2
  57. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +2 -1
  58. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +1 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +2 -1
  60. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +17 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +3 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +5 -0
  63. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +9 -18
  65. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +106 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/events/RecurringSchedule.d.ts +11 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +32 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +32 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +3 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +11 -1
  71. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  72. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +6 -6
  74. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +11 -5
  76. package/dist/_dts/blocks/src/system/runtime/nodes/shop.types.d.ts +2 -1
  77. package/dist/_dts/blocks/src/system/runtime/nodes/svg.d.ts +84 -0
  78. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +2 -0
  79. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +3 -40
  80. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +14 -0
  81. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +11 -0
  82. package/dist/_dts/core/src/branded.d.ts +49 -0
  83. package/dist/_dts/core/src/dated-offering-settlement.d.ts +47 -0
  84. package/dist/_dts/core/src/event-page-surface-subject.d.ts +44 -0
  85. package/dist/_dts/core/src/index.d.ts +49 -47
  86. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +1469 -14
  87. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +1 -1
  88. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +4 -1
  89. package/dist/_dts/media-core/src/index.d.ts +2 -1
  90. package/dist/_dts/media-core/src/storagePathDomain.d.ts +47 -0
  91. package/dist/_dts/media-core/src/url.d.ts +1 -21
  92. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  93. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -1
  94. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  95. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -9
  96. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -11
  97. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -9
  98. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +2 -6
  99. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -9
  100. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +81 -43
  101. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.typography.d.ts +61 -0
  102. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +7 -17
  103. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +15 -8
  104. package/dist/_dts/preview-next/src/client/preview/typographyFontCatalog.d.ts +57 -0
  105. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -1
  106. package/dist/_dts/sdk/src/cli/commands/push/execute/theme.d.ts +4 -7
  107. package/dist/_dts/sdk/src/cli/commands/style.d.ts +24 -10
  108. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +3 -3
  109. package/dist/_dts/sdk/src/cli/sync/media.d.ts +16 -2
  110. package/dist/_dts/sdk/src/client/management/blocks.d.ts +1 -1
  111. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  112. package/dist/_dts/sdk/src/client/management/types.d.ts +132 -23
  113. package/dist/_dts/sdk/src/client/types.d.ts +2 -0
  114. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  115. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  116. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  117. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +25 -5
  118. package/dist/_dts/sdk/src/data/dataLoaderContext.d.ts +17 -0
  119. package/dist/_dts/sdk/src/data/dataLoaderValue.d.ts +36 -0
  120. package/dist/_dts/sdk/src/data/defineOwnDataProperty.d.ts +2 -0
  121. package/dist/_dts/sdk/src/data/executeCodeLoaders.d.ts +36 -40
  122. package/dist/_dts/sdk/src/data/index.d.ts +3 -3
  123. package/dist/_dts/sdk/src/data/resolveBlockData.d.ts +54 -0
  124. package/dist/_dts/sdk/src/data/types.d.ts +43 -78
  125. package/dist/_dts/sdk/src/next/index.d.ts +1 -0
  126. package/dist/_dts/sdk/src/next/redirect-destination.d.ts +1 -1
  127. package/dist/_dts/sdk/src/next/resolveTheme.d.ts +2 -1
  128. package/dist/_dts/sdk/src/next/types.d.ts +10 -1
  129. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -8
  130. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +9 -4
  131. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +6 -10
  132. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
  133. package/dist/_dts/sdk/src/server.d.ts +4 -3
  134. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  135. package/dist/_dts/sdk/src/version.d.ts +1 -1
  136. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +2 -2
  137. package/dist/_dts/site-commands/src/commands.d.ts +921 -30
  138. package/dist/_dts/theme-core/src/ThemeScope.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/buttons/affordanceIcons.d.ts +29 -0
  140. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +6 -0
  141. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +5 -1
  142. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  143. package/dist/_dts/theme-core/src/buttons/personalities/flat-ink.d.ts +20 -0
  144. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +22 -0
  145. package/dist/_dts/theme-core/src/buttons/personalities/quiet-arrow.d.ts +17 -0
  146. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +6 -2
  147. package/dist/_dts/theme-core/src/buttons/types.d.ts +43 -5
  148. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  149. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -1
  150. package/dist/_dts/theme-core/src/fonts/types.d.ts +6 -0
  151. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  152. package/dist/_dts/theme-core/src/gradients/types.d.ts +27 -3
  153. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +87 -39
  154. package/dist/_dts/theme-core/src/palette/colors.d.ts +12 -0
  155. package/dist/_dts/theme-core/src/palette/curated/brand-led.d.ts +22 -4
  156. package/dist/_dts/theme-core/src/palette/curated/high-contrast.d.ts +6 -3
  157. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +31 -224
  158. package/dist/_dts/theme-core/src/palette/curated/soft-natural.d.ts +8 -4
  159. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +14 -12
  160. package/dist/_dts/theme-core/src/palette/curated/warm-dark.d.ts +4 -2
  161. package/dist/_dts/theme-core/src/palette/curated/warm-neutral.d.ts +8 -4
  162. package/dist/_dts/theme-core/src/palette/editorState.d.ts +33 -3
  163. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -3
  164. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +12 -6
  165. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +20 -57
  166. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +29 -4
  167. package/dist/_dts/theme-core/src/palette/selection.d.ts +6 -4
  168. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +3 -4
  169. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +1 -0
  170. package/dist/_dts/theme-core/src/schema.d.ts +229 -30
  171. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +2 -1
  172. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +218 -158
  173. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -6
  174. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +218 -158
  175. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +1 -0
  176. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  177. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +208 -49
  178. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +8 -2
  179. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +6 -2
  180. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +56 -1
  181. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -1
  182. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +24 -1
  183. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +14 -48
  184. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +10 -23
  185. package/dist/_dts/theme-core/src/site-styles/siteStyleThemeCompiler.d.ts +1 -2
  186. package/dist/_dts/theme-core/src/site-styles/siteStyleTypography.d.ts +456 -0
  187. package/dist/_dts/theme-core/src/site-styles/types.d.ts +52 -3
  188. package/dist/_dts/theme-core/src/status/index.d.ts +0 -1
  189. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +19 -0
  190. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +9 -0
  191. package/dist/_dts/theme-core/src/surfaces/index.d.ts +2 -0
  192. package/dist/_dts/ui/src/button.d.ts +1 -1
  193. package/dist/cli/index.mjs +4146 -1602
  194. package/dist/client/{DiscountCodeDisclosure-Dit2aItR.mjs → DiscountCodeDisclosure-BwGkvmVH.mjs} +1 -1
  195. package/dist/client/{EventCombined.client-BnREyCjf.mjs → EventCombined.client-JnWE6Hzc.mjs} +4 -4
  196. package/dist/client/{EventListing.client-0uHld51x.mjs → EventListing.client-DQewc_kg.mjs} +2 -2
  197. package/dist/client/{LeafletStaticMap-DJcvSfmj.mjs → LeafletStaticMap-DPAU3SFt.mjs} +1 -1
  198. package/dist/client/{MagicLinkForm-EAsIktfw.mjs → MagicLinkForm-D4kpWCbW.mjs} +2 -2
  199. package/dist/client/{StepIndicator-CRR17tYI.mjs → StepIndicator-CBlkb4rA.mjs} +2 -2
  200. package/dist/client/{accordion-B47HIuuH.mjs → accordion-DAIBVpTS.mjs} +1 -1
  201. package/dist/client/{bookingForm-I1E-8F9P.mjs → bookingForm-DZ-4l5_1.mjs} +7 -7
  202. package/dist/client/bookings.mjs +360 -95
  203. package/dist/client/{buttons-BbPn8OKA.mjs → buttons-DJgynGHQ.mjs} +243 -43
  204. package/dist/client/{carousel-OlM7SyBs.mjs → carousel-D-SLfX8r.mjs} +1 -1
  205. package/dist/client/{cart-BKpG5jz6.mjs → cart-CEgbgJhX.mjs} +3 -3
  206. package/dist/client/{checkout-Dmmr6qoU.mjs → checkout-CXWrCRAA.mjs} +3 -3
  207. package/dist/client/client.mjs +6019 -1494
  208. package/dist/client/{colorStyles-DuW4Fjqd.mjs → colorStyles-jZS6KfkP.mjs} +46 -5
  209. package/dist/client/{colorTokenParts-dT8MISgJ.mjs → colorTokenParts-CMugwvX_.mjs} +3 -1
  210. package/dist/client/{courseRegistration-CflZiqGk.mjs → courseRegistration-DVmLrRVz.mjs} +56 -21
  211. package/dist/client/{eventCalendar-BvoLWcp-.mjs → eventCalendar-DCuyPY_c.mjs} +173 -5
  212. package/dist/client/{eventCombined-DsrO8t_t.mjs → eventCombined-kP2CA2D4.mjs} +2 -2
  213. package/dist/client/{eventDetails-C3hxgcJm.mjs → eventDetails-DU0LeF5e.mjs} +4 -4
  214. package/dist/client/{eventListing-C-hb237X.mjs → eventListing-CcHF87BI.mjs} +2 -2
  215. package/dist/client/{eventRegistration-B0gyzDGi.mjs → eventRegistration-DJnR0yFH.mjs} +8 -8
  216. package/dist/client/{form-C_RUi6oJ.mjs → form-CH1lCusH.mjs} +2 -2
  217. package/dist/client/{headerSection-IKQiD2U0.mjs → headerSection-CBPFZoku.mjs} +3 -3
  218. package/dist/client/hooks.mjs +3645 -1857
  219. package/dist/client/{locationMap-8ZBrMzRJ.mjs → locationMap-Cx1hBg5n.mjs} +3 -3
  220. package/dist/client/{media-CZJKL7fi.mjs → media-DHtSxS5V.mjs} +61 -56
  221. package/dist/client/{newsletterForm-CYk3ucwj.mjs → newsletterForm-1ZL_ti9u.mjs} +3 -3
  222. package/dist/client/{pricing-B5GmvfIH.mjs → pricing-BIbzmV0G.mjs} +1 -1
  223. package/dist/client/{productDetail-BjS2Dqzo.mjs → productDetail-BTh5gHBV.mjs} +3 -3
  224. package/dist/client/{productList-BOHvC8My.mjs → productList-Cc7OMrqN.mjs} +3 -3
  225. package/dist/client/{propsDecoder-WS6UEJwZ.mjs → propsDecoder-oR-M-ISN.mjs} +228 -60
  226. package/dist/client/rendering/client.mjs +3231 -1477
  227. package/dist/client/rendering/islands.mjs +20 -20
  228. package/dist/client/rendering.mjs +6889 -1927
  229. package/dist/client/{shop-CON03-wN.mjs → shop-CQ_YbCnn.mjs} +8 -8
  230. package/dist/client/{shop-commerce-DlqrFgH8.mjs → shop-commerce-BM-AoD3M.mjs} +6 -6
  231. package/dist/client/{shop-commerce-store-l74-Kne6.mjs → shop-commerce-store-DFMQhU5p.mjs} +1 -1
  232. package/dist/client/{shopShared-CQheEXSg.mjs → shopShared-D0SKO2Cu.mjs} +3 -3
  233. package/dist/client/{useDiscountCodeUi-v6OluyWl.mjs → useDiscountCodeUi-CrG4_ARt.mjs} +1 -1
  234. package/dist/client/{useEventFilters-BqSTcNOf.mjs → useEventFilters-CxK8Fekl.mjs} +6 -6
  235. package/dist/client/{usePolling-DMfADjIF.mjs → usePolling-jcVryNgZ.mjs} +2 -2
  236. package/dist/preview-next/before-render.mjs +40 -1
  237. package/dist/preview-next/client/runtime.mjs +4 -4
  238. package/dist/preview-next/middleware.mjs +40 -1
  239. package/dist/{previewAuthStore-CfquDtTh.mjs → previewAuthStore-BPcJPzdz.mjs} +40 -1
  240. package/dist/{sdk-runtime-BUmJ0DaT.mjs → sdk-runtime-C39Rsk-x.mjs} +2 -2
  241. package/dist/{separator-Dd-JYok7.mjs → separator-BoMSQnsP.mjs} +1 -1
  242. package/dist/server/components.mjs +6345 -2084
  243. package/dist/server/config-validation.mjs +3420 -1856
  244. package/dist/server/config.mjs +3420 -1856
  245. package/dist/server/data.mjs +4067 -1923
  246. package/dist/server/index.mjs +46 -4
  247. package/dist/server/next/middleware.mjs +1 -1
  248. package/dist/server/next.mjs +7239 -2147
  249. package/dist/server/page-converter.mjs +3189 -1619
  250. package/dist/server/prebuild.mjs +1 -1
  251. package/dist/server/rendering/server.mjs +6540 -2058
  252. package/dist/server/rendering.mjs +7339 -2377
  253. package/dist/server/routing.mjs +3373 -1101
  254. package/dist/server/server.mjs +4307 -2002
  255. package/dist/server/theme-bridge.mjs +9844 -7325
  256. package/dist/server/theme.mjs +300 -47
  257. package/dist/styles/index.css +1863 -94
  258. package/package.json +1 -1
  259. package/dist/_dts/blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.d.ts +0 -2
  260. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +0 -16
  261. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +0 -55
  262. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +0 -34
  263. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +0 -232
  264. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +0 -219
  265. package/dist/_dts/theme-core/src/status/contextualColors.d.ts +0 -6
@@ -1,4 +1,34 @@
1
- import { t as parseColorTokenParts } from "./colorTokenParts-dT8MISgJ.mjs";
1
+ import { t as parseColorTokenParts } from "./colorTokenParts-CMugwvX_.mjs";
2
+ //#region ../theme-core/src/surfaces/foregroundContract.ts
3
+ const SURFACE_FOREGROUND_CSS_VARS = {
4
+ text: "--rb-surface-text-color",
5
+ heading: "--rb-surface-heading-color",
6
+ link: "--rb-surface-link-color",
7
+ supporting: "--rb-surface-supporting-color"
8
+ };
9
+ const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
10
+ const DEFAULT_ROLE_FALLBACKS = {
11
+ text: DEFAULT_SURFACE_TEXT_COLOR,
12
+ heading: DEFAULT_SURFACE_TEXT_COLOR,
13
+ link: "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))",
14
+ supporting: "rgb(var(--tb-mutedText, 100 116 139))"
15
+ };
16
+ function requireSurfaceColorValue(role, value) {
17
+ const normalized = value.trim();
18
+ if (normalized.length === 0) throw new RangeError(`Surface foreground ${role} must be a non-empty CSS color.`);
19
+ return normalized;
20
+ }
21
+ function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FALLBACKS[role]) {
22
+ const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
23
+ const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
24
+ if (role === "text") return `var(${roleVariable}, ${fallback})`;
25
+ return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
26
+ }
27
+ function surfaceForegroundValueWithOpacity(role, opacityPercent) {
28
+ if (!Number.isFinite(opacityPercent) || opacityPercent < 0 || opacityPercent > 100) throw new RangeError("Surface foreground opacity must be between 0 and 100.");
29
+ return `color-mix(in srgb, ${surfaceForegroundValue(role)} ${opacityPercent}%, transparent)`;
30
+ }
31
+ //#endregion
2
32
  //#region ../theme-core/src/utils/colorStyles.ts
3
33
  const COLOR_VAR_PREFIX = "--tb-";
4
34
  function parseToken(source) {
@@ -10,9 +40,17 @@ function parseToken(source) {
10
40
  if (parts.kind === "invalid") return { token: source };
11
41
  return {
12
42
  token: parts.token,
13
- alpha: parts.opacityPercent === null ? void 0 : parts.opacityPercent / 100
43
+ opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
14
44
  };
15
45
  }
46
+ const SURFACE_TEXT_ROLE_BY_TOKEN = {
47
+ text: "text",
48
+ heading: "heading",
49
+ mutedText: "supporting"
50
+ };
51
+ function surfaceRoleForTextToken(token) {
52
+ return Object.prototype.hasOwnProperty.call(SURFACE_TEXT_ROLE_BY_TOKEN, token) ? SURFACE_TEXT_ROLE_BY_TOKEN[token] : null;
53
+ }
16
54
  /**
17
55
  * Converts a theme color token to a CSS rgb value.
18
56
  * This is the primary function for applying theme colors to CSS properties.
@@ -26,11 +64,11 @@ function parseToken(source) {
26
64
  * rgbColorValue('raw:transparent') // => 'transparent'
27
65
  */
28
66
  function rgbColorValue(token) {
29
- const { token: baseToken, alpha, raw } = parseToken(token);
67
+ const { token: baseToken, opacityPercent, raw } = parseToken(token);
30
68
  if (raw) return raw;
31
69
  const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
32
- if (alpha === void 0) return `rgb(var(${cssVar}))`;
33
- return `rgb(var(${cssVar}) / ${alpha})`;
70
+ if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
71
+ return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
34
72
  }
35
73
  /**
36
74
  * Creates a backgroundColor style object from a theme token.
@@ -48,6 +86,9 @@ function backgroundColorStyle(token) {
48
86
  * @returns CSSProperties with color
49
87
  */
50
88
  function textColorStyle(token) {
89
+ const parsed = parseToken(token);
90
+ const surfaceRole = parsed.raw ? null : surfaceRoleForTextToken(parsed.token);
91
+ if (surfaceRole) return { color: parsed.opacityPercent === void 0 ? surfaceForegroundValue(surfaceRole) : surfaceForegroundValueWithOpacity(surfaceRole, parsed.opacityPercent) };
51
92
  return { color: rgbColorValue(token) };
52
93
  }
53
94
  /**
@@ -21,6 +21,7 @@ function parseUuidBrand(value, unsafeConstructor) {
21
21
  if (!UUID_PATTERN.test(normalized)) return err({ kind: "invalid_uuid" });
22
22
  return ok(unsafeConstructor(normalized));
23
23
  }
24
+ const unsafeAsEventOfferingId = (id) => id;
24
25
  const unsafeAsEventSeriesId = (id) => id;
25
26
  const unsafeAsMediaAssetId = (id) => id;
26
27
  const unsafeAsStorageBucketName = (value) => value;
@@ -30,6 +31,7 @@ const unsafeAsPassId = (id) => id;
30
31
  const unsafeAsCustomerPassId = (id) => id;
31
32
  const unsafeAsAppointmentServiceId = (id) => id;
32
33
  const unsafeAsAppointmentResourceId = (id) => id;
34
+ const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
33
35
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
34
36
  //#endregion
35
37
  //#region ../media-core/src/transformRect.ts
@@ -137,4 +139,4 @@ function parseColorTokenParts(source) {
137
139
  };
138
140
  }
139
141
  //#endregion
140
- export { parseEventSeriesId as a, unsafeAsCustomerPassId as c, unsafeAsPassId as d, unsafeAsStorageBucketName as f, ok as h, resolveMediaTransformForAspect as i, unsafeAsFormId as l, err as m, isExplicitRectCrop as n, unsafeAsAppointmentResourceId as o, unsafeAsStoragePath as p, parseAspectRatioValue as r, unsafeAsAppointmentServiceId as s, parseColorTokenParts as t, unsafeAsMediaAssetId as u };
142
+ export { parseEventOfferingId as a, unsafeAsAppointmentServiceId as c, unsafeAsMediaAssetId as d, unsafeAsPassId as f, ok as g, err as h, resolveMediaTransformForAspect as i, unsafeAsCustomerPassId as l, unsafeAsStoragePath as m, isExplicitRectCrop as n, parseEventSeriesId as o, unsafeAsStorageBucketName as p, parseAspectRatioValue as r, unsafeAsAppointmentResourceId as s, parseColorTokenParts as t, unsafeAsFormId as u };
@@ -1,17 +1,17 @@
1
1
  "use client";
2
- import { Dt as formatBookingTime, Mt as toBookingTimeZone, Nt as toScheduledBookingDateTime, t as defineIslandPropsDecoder, wt as formatBookingDate } from "./propsDecoder-WS6UEJwZ.mjs";
3
- import { n as formatCoursePriceDisplay, r as resolveCoursePricingState, t as formatCoursePriceAmount } from "./pricing-B5GmvfIH.mjs";
2
+ import { Ft as parseEventPageSurfaceSubject, Nt as toBookingTimeZone, Ot as formatBookingTime, Pt as toScheduledBookingDateTime, Tt as formatBookingDate, Ut as assertNever, t as defineIslandPropsDecoder } from "./propsDecoder-oR-M-ISN.mjs";
3
+ import { n as formatCoursePriceDisplay, r as resolveCoursePricingState, t as formatCoursePriceAmount } from "./pricing-BIbzmV0G.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 { i as CheckIcon, n as TerminalPanel, r as StateIcon, t as useDiscountCodeUi } from "./useDiscountCodeUi-v6OluyWl.mjs";
7
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-Dit2aItR.mjs";
8
- import { n as SpinnerNode, r as formatPrice, t as StepIndicator$1 } from "./StepIndicator-CRR17tYI.mjs";
9
- import { t as themeButtonClassName } from "./buttons-BbPn8OKA.mjs";
6
+ import { i as CheckIcon, n as TerminalPanel, r as StateIcon, t as useDiscountCodeUi } from "./useDiscountCodeUi-CrG4_ARt.mjs";
7
+ import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-BwGkvmVH.mjs";
8
+ import { n as SpinnerNode, r as formatPrice, t as StepIndicator$1 } from "./StepIndicator-CBlkb4rA.mjs";
9
+ import { t as themeButtonClassName } from "./buttons-DJgynGHQ.mjs";
10
10
  import { t as FeedbackMessage } from "./FeedbackMessage-ByMrs3cr.mjs";
11
11
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
12
12
  import { t as buildCheckoutReturnUrls } from "./checkoutUrls-Ct8Mxna3.mjs";
13
13
  import { t as scrollToBlock } from "./scrollToBlock-C86BYkyV.mjs";
14
- import { a as ClockIcon, i as LoggedInAsUser, n as logoutPortal, r as useWaitlistClaim, t as MagicLinkForm } from "./MagicLinkForm-EAsIktfw.mjs";
14
+ import { a as ClockIcon, i as LoggedInAsUser, n as logoutPortal, r as useWaitlistClaim, t as MagicLinkForm } from "./MagicLinkForm-D4kpWCbW.mjs";
15
15
  import { t as CrossIcon } from "./CrossIcon-Dn1KRKW5.mjs";
16
16
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
17
17
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
@@ -564,6 +564,34 @@ function getStepLabels(steps) {
564
564
  return steps.map((step) => STEP_LABELS[step] ?? step);
565
565
  }
566
566
  //#endregion
567
+ //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
568
+ /**
569
+ * Resolves native course-page ownership without falling back to entry or slug
570
+ * coincidence when a page-surface subject is present but invalid.
571
+ */
572
+ function resolveCoursePageSurfaceScope(courses, subjectValue) {
573
+ if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
574
+ const parsed = parseEventPageSurfaceSubject(subjectValue);
575
+ if (!parsed.ok) return {
576
+ kind: "unsupported",
577
+ reason: parsed.error.kind
578
+ };
579
+ const seriesIds = eventSeriesIdsForSubject(parsed.value);
580
+ const allowedSeriesIds = new Set(seriesIds);
581
+ return {
582
+ kind: "scoped",
583
+ subject: parsed.value,
584
+ courses: courses.filter((course) => allowedSeriesIds.has(course.seriesId))
585
+ };
586
+ }
587
+ function eventSeriesIdsForSubject(subject) {
588
+ switch (subject.kind) {
589
+ case "eventSeries": return [subject.eventSeriesId];
590
+ case "eventOffering": return subject.availableEventSeriesIds;
591
+ default: return assertNever(subject);
592
+ }
593
+ }
594
+ //#endregion
567
595
  //#region ../blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.ts
568
596
  function parseCurrencyInputToCents(value) {
569
597
  const trimmed = value.trim();
@@ -619,13 +647,16 @@ function resolveHasCoursePayment(pricing) {
619
647
  }
620
648
  function useCourseRegistrationWizard(props) {
621
649
  const api = useBlockApi();
622
- const { contentEntry, courses, entrySubrouteContext } = props;
650
+ const { contentEntry, courses, entrySubrouteContext, subject } = props;
623
651
  const scopedCourses = useMemo(() => {
624
652
  const allCourses = courses ?? [];
625
653
  if (entrySubrouteContext?.kind === "course-run") {
626
654
  const matched = allCourses.find((c) => c.id === entrySubrouteContext.run.courseId) ?? null;
627
655
  if (matched) return [matched];
628
656
  }
657
+ const pageSurfaceScope = resolveCoursePageSurfaceScope(allCourses, subject);
658
+ if (pageSurfaceScope.kind === "unsupported") return [];
659
+ if (pageSurfaceScope.kind === "scoped") return [...pageSurfaceScope.courses];
629
660
  if (contentEntry?.id) {
630
661
  const matchedCourses = allCourses.filter((c) => c.contentEntryId === contentEntry.id);
631
662
  if (matchedCourses.length > 0) return matchedCourses;
@@ -639,7 +670,8 @@ function useCourseRegistrationWizard(props) {
639
670
  courses,
640
671
  contentEntry?.id,
641
672
  contentEntry?.slug,
642
- entrySubrouteContext
673
+ entrySubrouteContext,
674
+ subject
643
675
  ]);
644
676
  const [step, setStep] = useState(() => {
645
677
  const enrollment = new URLSearchParams(window.location.search).get("enrollment");
@@ -1558,24 +1590,27 @@ function getCourseSlidingScaleMessage(pricing) {
1558
1590
  return null;
1559
1591
  }
1560
1592
  function CourseRegistrationWizard(props) {
1561
- const { showSessions = true, showPrice = true, showCapacity = true, showVenue = true, successMessage = "You're booked in! Check your email for confirmation and session details.", waitlistMessage = "You've been added to the waitlist. We'll email you a claim link if a spot opens up.", membershipMessage = "Booked using your membership! Check your email for session details.", buttonText = "Book course", buttonVariant = "primary", className } = props;
1593
+ const { showSessions = true, showPrice = true, showCapacity = true, showVenue = true, successMessage = "You're booked in! Check your email for confirmation and session details.", waitlistMessage = "You've been added to the waitlist. We'll email you a claim link if a spot opens up.", membershipMessage = "Booked using your membership! Check your email for session details.", buttonText = "Sign up", buttonVariant = "primary", className } = props;
1562
1594
  const { api, scopedCourses, step, setStep, selectedCourse, selectedPricingOptionId, setSelectedPricingOptionId, selectedSlidingAmountInput, setSelectedSlidingAmountInput, selectedCoursePricing, formData, setFormData, errors, enrollmentResult, errorMessage, portalAuthState, handleLogout, altchaSolution: _altchaSolution, setAltchaSolution, showSpamProtection, eligibilityLoading, eligibilityError, courseEligibility, eligibleMemberships, paymentChoice, setPaymentChoice, selectedMembershipId, setSelectedMembershipId, discountUiOpen, setDiscountUiOpen, discountCode, setDiscountCode, discountsAvailable, manualCodeEntryAllowed, discountsAvailableLoading, waitlistClaim, canUseMembership: _canUseMembership, bookingMode, currentStepNumber, totalSteps, stepLabels, showPortalAuthSidebar, hasPreSelectedCourse: _hasPreSelectedCourse, hasCoursePayment: _hasCoursePayment, handleCourseSelect, handleSubmit, handlePaymentContinue, handleRetry, handleBookingModeChange } = useCourseRegistrationWizard(props);
1563
1595
  const buttonClass = themeButtonClassName({
1564
1596
  variant: buttonVariant,
1565
1597
  size: "md"
1566
1598
  });
1567
- if (scopedCourses.length === 0) return /* @__PURE__ */ jsx("div", {
1568
- id: COURSE_REGISTRATION_ANCHOR_ID,
1569
- className: `course-registration ${className || ""}`,
1570
- "data-block": "course-registration",
1571
- children: /* @__PURE__ */ jsx("div", {
1572
- className: "cr-empty",
1573
- children: /* @__PURE__ */ jsx("p", {
1574
- className: "cr-empty__text",
1575
- children: "No courses available to book."
1599
+ if (scopedCourses.length === 0) {
1600
+ const awaitingOfferingRuns = props.subject?.kind === "eventOffering" && props.subject.availableEventSeriesIds.length === 0;
1601
+ return /* @__PURE__ */ jsx("div", {
1602
+ id: COURSE_REGISTRATION_ANCHOR_ID,
1603
+ className: `course-registration ${className || ""}`,
1604
+ "data-block": "course-registration",
1605
+ children: /* @__PURE__ */ jsx("div", {
1606
+ className: "cr-empty",
1607
+ children: /* @__PURE__ */ jsx("p", {
1608
+ className: "cr-empty__text",
1609
+ children: awaitingOfferingRuns ? "New dates are coming soon. Booking will open when the next run is ready." : "No courses available to book."
1610
+ })
1576
1611
  })
1577
- })
1578
- });
1612
+ });
1613
+ }
1579
1614
  const allowedStatuses = api.config.isPreview ? ["active", "draft"] : ["active"];
1580
1615
  if (!scopedCourses.some((c) => !c.status || allowedStatuses.includes(c.status))) return /* @__PURE__ */ jsx("div", {
1581
1616
  id: COURSE_REGISTRATION_ANCHOR_ID,
@@ -1,12 +1,13 @@
1
1
  "use client";
2
- import { B as groupEventsByDate, D as getEventRuntimeFiltersKey, E as buildEventRuntimeFilters, G as getLocalDateKey, I as formatEventTeacherLine, K as getLocalMinuteOfDay, L as formatTime, T as buildEventCalendarListingRender, W as getEventAvailability, t as defineIslandPropsDecoder } from "./propsDecoder-WS6UEJwZ.mjs";
3
- import { a as CalendarDayCell, c as useCalendarEvents, d as getOrderedDayNames, f as getWeekCalendarDays, i as WeekAgendaView, l as MONTH_NAMES, o as EventModalProvider, p as isSameLocalDay, r as EventModals, s as useEventModal, t as EventCombinedClient, u as formatDateKey } from "./EventCombined.client-BnREyCjf.mjs";
4
- import { o as EventFilters, t as useEventFilters } from "./useEventFilters-BqSTcNOf.mjs";
2
+ import { t as clsx } from "./clsx-DgIEfj3H.mjs";
3
+ import { E as getEventRuntimeFiltersKey, F as formatEventTeacherLine, G as getLocalDateKey, I as formatTime, K as getLocalMinuteOfDay, T as buildEventRuntimeFilters, U as getEventAvailability, V as resolveEventLinkProps, W as getEventAvailabilityStatus, t as defineIslandPropsDecoder, w as buildEventCalendarListingRender, z as groupEventsByDate } from "./propsDecoder-oR-M-ISN.mjs";
4
+ import { a as CalendarDayCell, c as useCalendarEvents, d as getOrderedDayNames, f as getWeekCalendarDayTuple, h as isToday, i as WeekAgendaView, l as MONTH_NAMES, m as isSameLocalDay, o as EventModalProvider, p as getWeekCalendarDays, r as EventModals, s as useEventModal, t as EventCombinedClient, u as formatDateKey } from "./EventCombined.client-JnWE6Hzc.mjs";
5
+ import { o as EventFilters, t as useEventFilters } from "./useEventFilters-CxK8Fekl.mjs";
5
6
  import { t as BlockApiProvider } from "./context-BGZNlGXB.mjs";
6
- import { t as themeButtonClassName } from "./buttons-BbPn8OKA.mjs";
7
+ import { t as themeButtonClassName } from "./buttons-DJgynGHQ.mjs";
7
8
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
8
9
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
9
- import { n as EventListingController } from "./EventListing.client-0uHld51x.mjs";
10
+ import { n as EventListingController } from "./EventListing.client-DQewc_kg.mjs";
10
11
  import { useEffect, useId, useMemo, useState } from "react";
11
12
  import { jsx, jsxs } from "react/jsx-runtime";
12
13
  //#region ../calendar/src/lane-packing.ts
@@ -322,6 +323,157 @@ function parseDateKey(dateKey) {
322
323
  };
323
324
  }
324
325
  //#endregion
326
+ //#region ../blocks/src/system/runtime/nodes/events/shared/WeekBoardView.tsx
327
+ const SHORT_DAY_NAMES = [
328
+ "Sun",
329
+ "Mon",
330
+ "Tue",
331
+ "Wed",
332
+ "Thu",
333
+ "Fri",
334
+ "Sat"
335
+ ];
336
+ const LEGEND_ITEMS = [
337
+ {
338
+ status: "available",
339
+ label: "Places available"
340
+ },
341
+ {
342
+ status: "filling",
343
+ label: "Filling up"
344
+ },
345
+ {
346
+ status: "waitlist",
347
+ label: "Waitlist"
348
+ }
349
+ ];
350
+ /**
351
+ * Format an event's start–end as a compact range, merging the shared meridiem.
352
+ * "6:00 PM" + "7:00 PM" -> "6:00 – 7:00 PM"; "9:30 AM" + "10:15 AM" -> "9:30 – 10:15 AM".
353
+ */
354
+ function formatCompactTimeRange(event) {
355
+ const timeZone = event.timeZone ?? null;
356
+ const start = formatTime(event.startsAt, { timeZone });
357
+ const end = formatTime(event.endsAt, { timeZone });
358
+ const startMeridiem = start.slice(-2);
359
+ const endMeridiem = end.slice(-2);
360
+ if ((startMeridiem === "AM" || startMeridiem === "PM") && startMeridiem === endMeridiem) return `${start.slice(0, -3).trim()} – ${end}`;
361
+ return `${start} – ${end}`;
362
+ }
363
+ const WeekBoardCard = ({ event, showCapacity }) => {
364
+ const linkProps = resolveEventLinkProps(event);
365
+ const { status, label } = getEventAvailabilityStatus(event);
366
+ const pill = showCapacity ? label : null;
367
+ return /* @__PURE__ */ jsxs("a", {
368
+ ...linkProps,
369
+ className: "event-week-board-card",
370
+ "data-status": status,
371
+ children: [
372
+ /* @__PURE__ */ jsx("span", {
373
+ className: "event-week-board-card-title",
374
+ children: event.title
375
+ }),
376
+ /* @__PURE__ */ jsx("span", {
377
+ className: "event-week-board-card-time",
378
+ children: formatCompactTimeRange(event)
379
+ }),
380
+ pill ? /* @__PURE__ */ jsx("span", {
381
+ className: "event-week-board-card-pill",
382
+ "data-status": status,
383
+ children: pill
384
+ }) : null
385
+ ]
386
+ });
387
+ };
388
+ /**
389
+ * WeekBoardView
390
+ *
391
+ * Compact "class day-board": day columns side by side (one card per class per
392
+ * day), a legend of the three availability states, and a footer CTA. Collapses
393
+ * to a stacked list on mobile. Repurposes the week-grouped agenda data as a
394
+ * board rather than an hour-positioned timetable grid.
395
+ */
396
+ const WeekBoardView = ({ days, events, showCapacity, emptyMessage = "No classes scheduled this week", title, footerNote, ctaLabel = "Reserve a place", ctaHref = null, buttonVariant = "outline", elevated = false, banded = false }) => {
397
+ const eventsByDate = groupEventsByDate(events);
398
+ const hasAnyEvents = days.some((date) => (eventsByDate.get(formatDateKey(date)) ?? []).length > 0);
399
+ const ctaClassName = themeButtonClassName({
400
+ variant: buttonVariant,
401
+ size: "sm"
402
+ });
403
+ const hasTitle = typeof title === "string" && title.length > 0;
404
+ const hasFooterNote = typeof footerNote === "string" && footerNote.length > 0;
405
+ const hasCta = typeof ctaHref === "string" && ctaHref.length > 0;
406
+ const footerNoteText = hasAnyEvents ? hasFooterNote ? footerNote : null : emptyMessage;
407
+ const showFooter = hasCta || footerNoteText !== null;
408
+ return /* @__PURE__ */ jsx("div", {
409
+ className: "event-calendar event-calendar--week-board",
410
+ "data-block": "event-calendar",
411
+ ...banded ? { "data-banded": "" } : {},
412
+ children: /* @__PURE__ */ jsxs("div", {
413
+ className: "event-week-board",
414
+ style: { "--event-week-board-cols": String(days.length) },
415
+ ...elevated ? { "data-elevated": "" } : {},
416
+ children: [
417
+ /* @__PURE__ */ jsxs("div", {
418
+ className: "event-week-board-top",
419
+ children: [hasTitle ? /* @__PURE__ */ jsx("span", {
420
+ className: "event-week-board-title",
421
+ children: title
422
+ }) : null, /* @__PURE__ */ jsx("div", {
423
+ className: "event-week-board-legend",
424
+ "aria-hidden": "true",
425
+ children: LEGEND_ITEMS.map((item) => /* @__PURE__ */ jsxs("span", {
426
+ className: "event-week-board-legend-item",
427
+ children: [/* @__PURE__ */ jsx("i", {
428
+ className: "event-week-board-legend-dot",
429
+ "data-status": item.status
430
+ }), item.label]
431
+ }, item.status))
432
+ })]
433
+ }),
434
+ /* @__PURE__ */ jsx("div", {
435
+ className: "event-week-board-grid",
436
+ children: days.map((date) => {
437
+ const dateKey = formatDateKey(date);
438
+ const dayEvents = eventsByDate.get(dateKey) ?? [];
439
+ const today = isToday(date);
440
+ return /* @__PURE__ */ jsxs("div", {
441
+ className: clsx("event-week-board-day", dayEvents.length === 0 && "event-week-board-day--empty", today && "event-week-board-day--today"),
442
+ children: [/* @__PURE__ */ jsxs("div", {
443
+ className: "event-week-board-day-head",
444
+ children: [/* @__PURE__ */ jsx("span", {
445
+ className: "event-week-board-day-abbr",
446
+ children: SHORT_DAY_NAMES[date.getDay()]
447
+ }), /* @__PURE__ */ jsx("span", {
448
+ className: "event-week-board-day-num",
449
+ children: date.getDate()
450
+ })]
451
+ }), /* @__PURE__ */ jsx("div", {
452
+ className: "event-week-board-day-body",
453
+ children: dayEvents.map((event) => /* @__PURE__ */ jsx(WeekBoardCard, {
454
+ event,
455
+ showCapacity
456
+ }, event.occurrenceId || event.id))
457
+ })]
458
+ }, dateKey);
459
+ })
460
+ }),
461
+ showFooter ? /* @__PURE__ */ jsxs("div", {
462
+ className: "event-week-board-foot",
463
+ children: [footerNoteText !== null ? /* @__PURE__ */ jsx("p", {
464
+ className: "event-week-board-foot-note",
465
+ children: footerNoteText
466
+ }) : null, hasCta ? /* @__PURE__ */ jsx("a", {
467
+ className: ctaClassName,
468
+ href: ctaHref ?? void 0,
469
+ children: ctaLabel
470
+ }) : null]
471
+ }) : null
472
+ ]
473
+ })
474
+ });
475
+ };
476
+ //#endregion
325
477
  //#region ../blocks/src/system/runtime/nodes/events/shared/timetableModel.ts
326
478
  /**
327
479
  * Event-domain adapter over @riverbankcms/calendar.
@@ -586,8 +738,24 @@ const EventCalendarClient = ({ render }) => {
586
738
  });
587
739
  if (display.displayMode === "list") return /* @__PURE__ */ jsx(EventListingController, { render: buildEventCalendarListingRender(render) });
588
740
  if (display.displayMode === "timetable") return /* @__PURE__ */ jsx(EventCalendarTimetableClient, { render });
741
+ if (display.displayMode === "week-board") return /* @__PURE__ */ jsx(EventCalendarWeekBoardClient, { display });
589
742
  return /* @__PURE__ */ jsx(EventCalendarGridClient, { render });
590
743
  };
744
+ const EventCalendarWeekBoardClient = ({ display }) => {
745
+ return /* @__PURE__ */ jsx(WeekBoardView, {
746
+ days: useMemo(() => getWeekCalendarDayTuple(/* @__PURE__ */ new Date(), display.startOfWeek), [display.startOfWeek]),
747
+ events: [...display.events],
748
+ showCapacity: display.showCapacity,
749
+ emptyMessage: display.emptyMessage,
750
+ title: display.boardTitle,
751
+ footerNote: display.footerNote,
752
+ ctaLabel: display.loadMoreText ?? display.buttonText,
753
+ ctaHref: display.seeAllUrl,
754
+ buttonVariant: display.buttonVariant,
755
+ elevated: display.elevated,
756
+ banded: display.banded
757
+ });
758
+ };
591
759
  const EventCalendarTimetableClient = ({ render }) => {
592
760
  const { display, hydration } = render;
593
761
  const { filtersNode, listFilters } = useEventCalendarFilterState(display);
@@ -1,5 +1,5 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-WS6UEJwZ.mjs";
2
- import { n as EventCombinedIslandClient } from "./EventCombined.client-BnREyCjf.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-oR-M-ISN.mjs";
2
+ import { n as EventCombinedIslandClient } from "./EventCombined.client-JnWE6Hzc.mjs";
3
3
  import { t as BlockApiProvider } from "./context-BGZNlGXB.mjs";
4
4
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
5
5
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
@@ -1,8 +1,8 @@
1
- import { Bt as formatCurrencyAmount, Ft as publicEventPricingCurrency, H as resolveEventLinkProps, Lt as publicEventPricingType, Mt as toBookingTimeZone, N as formatEventDateParts, Nt as toScheduledBookingDateTime, P as formatEventPrice, U as resolveRuntimeEventPricing, kt as getBookingLocalDateKey, t as defineIslandPropsDecoder } from "./propsDecoder-WS6UEJwZ.mjs";
2
- import { n as formatCoursePriceDisplay, r as resolveCoursePricingState, t as formatCoursePriceAmount } from "./pricing-B5GmvfIH.mjs";
1
+ import { At as getBookingLocalDateKey, H as resolveRuntimeEventPricing, Ht as formatCurrencyAmount, Lt as publicEventPricingCurrency, M as formatEventDateParts, N as formatEventPrice, Nt as toBookingTimeZone, Pt as toScheduledBookingDateTime, V as resolveEventLinkProps, t as defineIslandPropsDecoder, zt as publicEventPricingType } from "./propsDecoder-oR-M-ISN.mjs";
2
+ import { n as formatCoursePriceDisplay, r as resolveCoursePricingState, t as formatCoursePriceAmount } from "./pricing-BIbzmV0G.mjs";
3
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
4
4
  import { n as filterPassesForEvent, t as filterMembershipsForEvent } from "./eventProductEligibility-AVxyCB1u.mjs";
5
- import { t as LeafletStaticMap } from "./LeafletStaticMap-DJcvSfmj.mjs";
5
+ import { t as LeafletStaticMap } from "./LeafletStaticMap-DPAU3SFt.mjs";
6
6
  import "react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region ../blocks/src/system/runtime/nodes/event-details/logic.ts
@@ -214,7 +214,7 @@ function EventDetailsView({ selection, showVenue, showMap, showOtherDates, showC
214
214
  className: "rb-mt-6",
215
215
  children: [/* @__PURE__ */ jsx("div", {
216
216
  className: "rb-label rb-mb-2",
217
- children: "Team members"
217
+ children: "With"
218
218
  }), /* @__PURE__ */ jsx("div", {
219
219
  className: "rb-flex rb-flex-col rb-gap-3",
220
220
  children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
@@ -1,8 +1,8 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-WS6UEJwZ.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-oR-M-ISN.mjs";
2
2
  import { t as BlockApiProvider } from "./context-BGZNlGXB.mjs";
3
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
4
4
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
5
- import { t as EventListingClient } from "./EventListing.client-0uHld51x.mjs";
5
+ import { t as EventListingClient } from "./EventListing.client-DQewc_kg.mjs";
6
6
  import "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  //#region src/rendering/islands/enhancers/eventListing.tsx
@@ -1,17 +1,17 @@
1
1
  "use client";
2
- import { n as buildBookingPaymentSelectionViewModel, t as usePolling } from "./usePolling-DMfADjIF.mjs";
3
- import { Bt as formatCurrencyAmount, C as getWizardStepsForContext, Dt as formatBookingTime, F as formatEventPriceDisplay, Ft as publicEventPricingCurrency, It as publicEventPricingMode, Lt as publicEventPricingType, Mt as toBookingTimeZone, Nt as toScheduledBookingDateTime, Rt as publicEventScalarPrice, S as getStepNumber, Tt as formatBookingDateTime, U as resolveRuntimeEventPricing, _ as findPreSelectedEvent, b as resolveRegistrationTarget, g as findEventByOccurrenceId, gt as assertNever, h as toRegistrationEvents, t as defineIslandPropsDecoder, v as resolveDiscountContext, w as resolveEventRegistrationScopedEvents, wt as formatBookingDate, x as WIZARD_STEPS, y as resolveEventRequiresPayment, zt as publicEventTicketTypes } from "./propsDecoder-WS6UEJwZ.mjs";
2
+ import { n as buildBookingPaymentSelectionViewModel, t as usePolling } from "./usePolling-jcVryNgZ.mjs";
3
+ import { Bt as publicEventScalarPrice, C as getWizardStepsForContext, Et as formatBookingDateTime, H as resolveRuntimeEventPricing, Ht as formatCurrencyAmount, Lt as publicEventPricingCurrency, Nt as toBookingTimeZone, Ot as formatBookingTime, P as formatEventPriceDisplay, Pt as toScheduledBookingDateTime, Rt as publicEventPricingMode, S as getStepNumber, Tt as formatBookingDate, Vt as publicEventTicketTypes, _ as findPreSelectedEvent, _t as assertNever, b as resolveRegistrationTarget, et as resolveEventRegistrationScopedEvents, g as findEventByOccurrenceId, h as toRegistrationEvents, t as defineIslandPropsDecoder, v as resolveDiscountContext, x as WIZARD_STEPS, y as resolveEventRequiresPayment, zt as publicEventPricingType } from "./propsDecoder-oR-M-ISN.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 { i as CheckIcon, n as TerminalPanel, r as StateIcon, t as useDiscountCodeUi } from "./useDiscountCodeUi-v6OluyWl.mjs";
7
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-Dit2aItR.mjs";
8
- import { n as SpinnerNode, r as formatPrice, t as StepIndicator$1 } from "./StepIndicator-CRR17tYI.mjs";
9
- import { t as themeButtonClassName } from "./buttons-BbPn8OKA.mjs";
6
+ import { i as CheckIcon, n as TerminalPanel, r as StateIcon, t as useDiscountCodeUi } from "./useDiscountCodeUi-CrG4_ARt.mjs";
7
+ import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-BwGkvmVH.mjs";
8
+ import { n as SpinnerNode, r as formatPrice, t as StepIndicator$1 } from "./StepIndicator-CBlkb4rA.mjs";
9
+ import { t as themeButtonClassName } from "./buttons-DJgynGHQ.mjs";
10
10
  import { t as FeedbackMessage } from "./FeedbackMessage-ByMrs3cr.mjs";
11
11
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
12
12
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
13
13
  import { t as consumeSearchParam } from "./urlParams-D71VXFGx.mjs";
14
- import { a as ClockIcon, i as LoggedInAsUser, n as logoutPortal, r as useWaitlistClaim, t as MagicLinkForm } from "./MagicLinkForm-EAsIktfw.mjs";
14
+ import { a as ClockIcon, i as LoggedInAsUser, n as logoutPortal, r as useWaitlistClaim, t as MagicLinkForm } from "./MagicLinkForm-D4kpWCbW.mjs";
15
15
  import { t as CrossIcon } from "./CrossIcon-Dn1KRKW5.mjs";
16
16
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
17
17
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
@@ -2931,7 +2931,7 @@ function useEventRegistrationWizardWithDeps(options, deps) {
2931
2931
  registrationEvents,
2932
2932
  options.occurrenceContext?.seriesId,
2933
2933
  options.subject?.kind,
2934
- options.subject?.kind === "eventSeries" ? options.subject.eventSeriesId : options.subject?.reason,
2934
+ options.subject?.kind === "eventSeries" ? options.subject.eventSeriesId : options.subject?.kind === "eventOffering" ? `${options.subject.eventOfferingId}:${options.subject.availableEventSeriesIds.join(",")}` : options.subject?.reason,
2935
2935
  options.contentEntry?.slug,
2936
2936
  options.contentEntry?.contentTypeSlug
2937
2937
  ]);
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { t as clsx } from "./clsx-DgIEfj3H.mjs";
3
- import { gt as assertNever, t as defineIslandPropsDecoder, vt as err, yt as ok } from "./propsDecoder-WS6UEJwZ.mjs";
3
+ import { _t as assertNever, bt as ok, t as defineIslandPropsDecoder, yt as err } from "./propsDecoder-oR-M-ISN.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-BbPn8OKA.mjs";
6
+ import { t as themeButtonClassName } from "./buttons-DJgynGHQ.mjs";
7
7
  import { t as FeedbackMessage } from "./FeedbackMessage-ByMrs3cr.mjs";
8
8
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
9
9
  import { useReducer, useRef, useState } from "react";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { r as buildCartDisplay, t as defineIslandPropsDecoder } from "./propsDecoder-WS6UEJwZ.mjs";
3
- import { t as themeButtonClassName } from "./buttons-BbPn8OKA.mjs";
2
+ import { r as buildCartDisplay, t as defineIslandPropsDecoder } from "./propsDecoder-oR-M-ISN.mjs";
3
+ import { t as themeButtonClassName } from "./buttons-DJgynGHQ.mjs";
4
4
  import { t as resolveDedicatedCheckoutPath } from "./checkoutRoute-ClwHwYVA.mjs";
5
- import { n as useCommerceCart } from "./shop-commerce-store-l74-Kne6.mjs";
5
+ import { n as useCommerceCart } from "./shop-commerce-store-DFMQhU5p.mjs";
6
6
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
7
7
  import * as React$1 from "react";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";