@riverbankcms/sdk 0.62.4 → 0.67.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 (349) hide show
  1. package/README.md +11 -0
  2. package/dist/_dts/api/src/accessAdmin.d.ts +64 -2
  3. package/dist/_dts/api/src/aiEndpoints.d.ts +2 -2
  4. package/dist/_dts/api/src/aiPlayground.d.ts +18 -11
  5. package/dist/_dts/api/src/apiEndpointTypes.d.ts +12 -0
  6. package/dist/_dts/api/src/billing.d.ts +46 -10
  7. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  8. package/dist/_dts/api/src/bookingOperations.d.ts +1 -1
  9. package/dist/_dts/api/src/bookingRecords.d.ts +26 -0
  10. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +12 -1
  11. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  12. package/dist/_dts/api/src/courses.d.ts +3 -0
  13. package/dist/_dts/api/src/endpoints.d.ts +48 -0
  14. package/dist/_dts/api/src/index.d.ts +8 -5
  15. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +29 -40
  16. package/dist/_dts/api/src/sdkContracts.d.ts +14 -2
  17. package/dist/_dts/api/src/siteMembers.d.ts +1 -1
  18. package/dist/_dts/api/src/siteOnboarding.d.ts +4 -0
  19. package/dist/_dts/api/src/siteOperations.d.ts +11 -1
  20. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +29 -0
  21. package/dist/_dts/api/src/types.d.ts +2 -1
  22. package/dist/_dts/billing/src/plans/registry.d.ts +1 -0
  23. package/dist/_dts/billing/src/plans/types.d.ts +10 -1
  24. package/dist/_dts/block-form/src/FormRenderer.d.ts +38 -0
  25. package/dist/_dts/block-form/src/backend/adapter.d.ts +7 -0
  26. package/dist/_dts/block-form/src/backend/hooks/useRepeaterBackend.d.ts +34 -0
  27. package/dist/_dts/block-form/src/backend/hooks.d.ts +66 -0
  28. package/dist/_dts/block-form/src/backend/index.d.ts +12 -0
  29. package/dist/_dts/block-form/src/backend/rhf-backend.d.ts +34 -0
  30. package/dist/_dts/block-form/src/backend/store-backend.d.ts +60 -0
  31. package/dist/_dts/block-form/src/backend/types.d.ts +137 -0
  32. package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +22 -0
  33. package/dist/_dts/block-form/src/backend/utils/getErrorMessage.d.ts +1 -0
  34. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +70 -0
  35. package/dist/_dts/block-form/src/client/blockDraftSaveability.d.ts +1 -0
  36. package/dist/_dts/block-form/src/client/index.d.ts +30 -0
  37. package/dist/_dts/block-form/src/context/BlockContext.d.ts +29 -0
  38. package/dist/_dts/block-form/src/context/DisplayLabelResolverContext.d.ts +33 -0
  39. package/dist/_dts/block-form/src/context/FieldPreviewResolverContext.d.ts +30 -0
  40. package/dist/_dts/block-form/src/context/ImageResolveContext.d.ts +1 -0
  41. package/dist/_dts/block-form/src/context/index.d.ts +4 -0
  42. package/dist/_dts/block-form/src/fields/props.d.ts +48 -0
  43. package/dist/_dts/block-form/src/fields/types.d.ts +223 -0
  44. package/dist/_dts/block-form/src/index.d.ts +22 -0
  45. package/dist/_dts/block-form/src/manifest/ManifestForm.d.ts +37 -0
  46. package/dist/_dts/block-form/src/manifest/canonicalValidation.d.ts +5 -0
  47. package/dist/_dts/block-form/src/manifest/filterSdkTabs.d.ts +44 -0
  48. package/dist/_dts/block-form/src/manifest/manifestFormAdapter.d.ts +61 -0
  49. package/dist/_dts/block-form/src/manifest/mergeManifestWithSdkOptions.d.ts +24 -0
  50. package/dist/_dts/block-form/src/palette/PaletteContext.d.ts +11 -0
  51. package/dist/_dts/block-form/src/registry/schemas.d.ts +105 -0
  52. package/dist/_dts/block-form/src/registry/widgets.d.ts +59 -0
  53. package/dist/_dts/block-form/src/sdk-config/SdkConfigContext.d.ts +110 -0
  54. package/dist/_dts/block-form/src/sdk-config/hooks.d.ts +21 -0
  55. package/dist/_dts/block-form/src/sdk-config/index.d.ts +2 -0
  56. package/dist/_dts/block-form/src/shared/disclosure.d.ts +1 -0
  57. package/dist/_dts/block-form/src/shared/hooks/index.d.ts +2 -0
  58. package/dist/_dts/block-form/src/shared/hooks/useCoarsePointer.d.ts +5 -0
  59. package/dist/_dts/block-form/src/shared/hooks/useContainerWidth.d.ts +6 -0
  60. package/dist/_dts/block-form/src/utils/VisibilityWrapper.d.ts +25 -0
  61. package/dist/_dts/block-form/src/utils/computeWatchedPath.d.ts +18 -0
  62. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +9 -0
  63. package/dist/_dts/block-form/src/utils/fieldHelpers.d.ts +94 -0
  64. package/dist/_dts/block-form/src/utils/resolvePromotedFields.d.ts +22 -0
  65. package/dist/_dts/block-form/src/utils/slug.d.ts +3 -0
  66. package/dist/_dts/block-form/src/utils/typeGuards.d.ts +3 -0
  67. package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/BackgroundColorField.d.ts +10 -0
  68. package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/BackgroundColorWidget.d.ts +23 -0
  69. package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/index.d.ts +2 -0
  70. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +13 -0
  71. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +17 -0
  72. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/index.d.ts +2 -0
  73. package/dist/_dts/block-form/src/widgets/BooleanField/BooleanField.d.ts +6 -0
  74. package/dist/_dts/block-form/src/widgets/BooleanField/booleanFieldDefaults.d.ts +6 -0
  75. package/dist/_dts/block-form/src/widgets/BooleanField/booleanFieldSchema.d.ts +7 -0
  76. package/dist/_dts/block-form/src/widgets/BooleanField/index.d.ts +3 -0
  77. package/dist/_dts/block-form/src/widgets/BoxStyleWidget/BoxStyleWidget.d.ts +17 -0
  78. package/dist/_dts/block-form/src/widgets/BoxStyleWidget/index.d.ts +1 -0
  79. package/dist/_dts/block-form/src/widgets/ContentTypeSelectField/contentTypeSelectFieldDefaults.d.ts +3 -0
  80. package/dist/_dts/block-form/src/widgets/ContentTypeSelectField/contentTypeSelectFieldSchema.d.ts +4 -0
  81. package/dist/_dts/block-form/src/widgets/DateField/DateField.d.ts +23 -0
  82. package/dist/_dts/block-form/src/widgets/DateField/dateFieldDefaults.d.ts +8 -0
  83. package/dist/_dts/block-form/src/widgets/DateField/dateFieldSchema.d.ts +9 -0
  84. package/dist/_dts/block-form/src/widgets/DateField/datePickerPopover.d.ts +32 -0
  85. package/dist/_dts/block-form/src/widgets/DateField/index.d.ts +4 -0
  86. package/dist/_dts/block-form/src/widgets/DateTimeField/DateTimeField.d.ts +30 -0
  87. package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldDefaults.d.ts +8 -0
  88. package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldSchema.d.ts +11 -0
  89. package/dist/_dts/block-form/src/widgets/DateTimeField/index.d.ts +4 -0
  90. package/dist/_dts/block-form/src/widgets/DateTimeField/utils/dateTimeUtils.d.ts +22 -0
  91. package/dist/_dts/block-form/src/widgets/DateTimeField/utils/index.d.ts +1 -0
  92. package/dist/_dts/block-form/src/widgets/EntryPickerField/entryPickerFieldDefaults.d.ts +3 -0
  93. package/dist/_dts/block-form/src/widgets/EntryPickerField/entryPickerFieldSchema.d.ts +4 -0
  94. package/dist/_dts/block-form/src/widgets/Field.d.ts +21 -0
  95. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +32 -0
  96. package/dist/_dts/block-form/src/widgets/FieldSettingsModal/FieldSettingsModal.d.ts +34 -0
  97. package/dist/_dts/block-form/src/widgets/FieldSettingsModal/index.d.ts +2 -0
  98. package/dist/_dts/block-form/src/widgets/GroupField/GroupField.d.ts +23 -0
  99. package/dist/_dts/block-form/src/widgets/GroupField/groupFieldDefaults.d.ts +9 -0
  100. package/dist/_dts/block-form/src/widgets/GroupField/groupFieldSchema.d.ts +10 -0
  101. package/dist/_dts/block-form/src/widgets/GroupField/index.d.ts +3 -0
  102. package/dist/_dts/block-form/src/widgets/LinkField/linkFieldDefaults.d.ts +10 -0
  103. package/dist/_dts/block-form/src/widgets/LinkField/linkFieldSchema.d.ts +3 -0
  104. package/dist/_dts/block-form/src/widgets/MediaField/mediaFieldDefaults.d.ts +6 -0
  105. package/dist/_dts/block-form/src/widgets/MediaField/mediaFieldSchema.d.ts +6 -0
  106. package/dist/_dts/block-form/src/widgets/ModalGroupField/ModalGroupField.d.ts +17 -0
  107. package/dist/_dts/block-form/src/widgets/ModalGroupField/index.d.ts +3 -0
  108. package/dist/_dts/block-form/src/widgets/ModalGroupField/modalFieldDefaults.d.ts +18 -0
  109. package/dist/_dts/block-form/src/widgets/ModalGroupField/modalFieldSchema.d.ts +14 -0
  110. package/dist/_dts/block-form/src/widgets/NumberField/NumberField.d.ts +7 -0
  111. package/dist/_dts/block-form/src/widgets/NumberField/index.d.ts +3 -0
  112. package/dist/_dts/block-form/src/widgets/NumberField/numberFieldDefaults.d.ts +6 -0
  113. package/dist/_dts/block-form/src/widgets/NumberField/numberFieldSchema.d.ts +7 -0
  114. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/PresetOrCustomField.d.ts +11 -0
  115. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/index.d.ts +4 -0
  116. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/presetOrCustomFieldDefaults.d.ts +3 -0
  117. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/presetOrCustomFieldSchema.d.ts +4 -0
  118. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/types.d.ts +37 -0
  119. package/dist/_dts/block-form/src/widgets/ReferenceField/referenceFieldDefaults.d.ts +3 -0
  120. package/dist/_dts/block-form/src/widgets/ReferenceField/referenceFieldSchema.d.ts +4 -0
  121. package/dist/_dts/block-form/src/widgets/RepeaterField/RepeaterField.d.ts +26 -0
  122. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterDragHandle.d.ts +8 -0
  123. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterError.d.ts +11 -0
  124. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterHeader.d.ts +10 -0
  125. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterLayoutGrid.d.ts +27 -0
  126. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +19 -0
  127. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +23 -0
  128. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +16 -0
  129. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowContent.d.ts +19 -0
  130. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterTabbedEditDialog.d.ts +16 -0
  131. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailCard.d.ts +26 -0
  132. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailGrid.d.ts +20 -0
  133. package/dist/_dts/block-form/src/widgets/RepeaterField/components/index.d.ts +11 -0
  134. package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +34 -0
  135. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +6 -0
  136. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/layoutGridCapacityDecision.d.ts +22 -0
  137. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLayoutGridCapacity.d.ts +20 -0
  138. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +23 -0
  139. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +10 -0
  140. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterRowErrors.d.ts +12 -0
  141. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterVisibility.d.ts +6 -0
  142. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +12 -0
  143. package/dist/_dts/block-form/src/widgets/RepeaterField/index.d.ts +3 -0
  144. package/dist/_dts/block-form/src/widgets/RepeaterField/repeaterFieldDefaults.d.ts +7 -0
  145. package/dist/_dts/block-form/src/widgets/RepeaterField/repeaterFieldSchema.d.ts +8 -0
  146. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildItemLabel.d.ts +7 -0
  147. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +7 -0
  148. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/createDefaultItem.d.ts +6 -0
  149. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/getRepeaterItemFieldGroups.d.ts +8 -0
  150. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/getRepeaterItemFields.d.ts +22 -0
  151. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +10 -0
  152. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/layoutGridCapacityContext.d.ts +2 -0
  153. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +43 -0
  154. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterPresentation.d.ts +24 -0
  155. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/resolveThumbnail.d.ts +12 -0
  156. package/dist/_dts/block-form/src/widgets/RichTextField/richTextFieldDefaults.d.ts +20 -0
  157. package/dist/_dts/block-form/src/widgets/RichTextField/richTextFieldSchema.d.ts +16 -0
  158. package/dist/_dts/block-form/src/widgets/SdkSelectField/SdkSelectField.d.ts +11 -0
  159. package/dist/_dts/block-form/src/widgets/SdkSelectField/index.d.ts +1 -0
  160. package/dist/_dts/block-form/src/widgets/SelectField/SelectField.d.ts +7 -0
  161. package/dist/_dts/block-form/src/widgets/SelectField/index.d.ts +3 -0
  162. package/dist/_dts/block-form/src/widgets/SelectField/selectFieldDefaults.d.ts +6 -0
  163. package/dist/_dts/block-form/src/widgets/SelectField/selectFieldSchema.d.ts +7 -0
  164. package/dist/_dts/block-form/src/widgets/SelectWidget.d.ts +34 -0
  165. package/dist/_dts/block-form/src/widgets/SettingsModal/SettingsModal.d.ts +17 -0
  166. package/dist/_dts/block-form/src/widgets/SettingsModal/index.d.ts +2 -0
  167. package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +16 -0
  168. package/dist/_dts/block-form/src/widgets/SliderField/index.d.ts +1 -0
  169. package/dist/_dts/block-form/src/widgets/SlugField/SlugField.d.ts +39 -0
  170. package/dist/_dts/block-form/src/widgets/SlugField/hooks/index.d.ts +1 -0
  171. package/dist/_dts/block-form/src/widgets/SlugField/hooks/useSlugAutoGeneration.d.ts +29 -0
  172. package/dist/_dts/block-form/src/widgets/SlugField/index.d.ts +5 -0
  173. package/dist/_dts/block-form/src/widgets/SlugField/slugFieldDefaults.d.ts +8 -0
  174. package/dist/_dts/block-form/src/widgets/SlugField/slugFieldSchema.d.ts +14 -0
  175. package/dist/_dts/block-form/src/widgets/SlugField/utils/index.d.ts +2 -0
  176. package/dist/_dts/block-form/src/widgets/SlugField/utils/pathUtils.d.ts +30 -0
  177. package/dist/_dts/block-form/src/widgets/SlugField/utils/slugUtils.d.ts +17 -0
  178. package/dist/_dts/block-form/src/widgets/TabGroupField/TabGroupField.d.ts +13 -0
  179. package/dist/_dts/block-form/src/widgets/TabGroupField/index.d.ts +3 -0
  180. package/dist/_dts/block-form/src/widgets/TabGroupField/tabGroupFieldSchema.d.ts +25 -0
  181. package/dist/_dts/block-form/src/widgets/TabGroupField/types.d.ts +46 -0
  182. package/dist/_dts/block-form/src/widgets/TextField/TextField.d.ts +7 -0
  183. package/dist/_dts/block-form/src/widgets/TextField/index.d.ts +3 -0
  184. package/dist/_dts/block-form/src/widgets/TextField/textFieldDefaults.d.ts +6 -0
  185. package/dist/_dts/block-form/src/widgets/TextField/textFieldSchema.d.ts +7 -0
  186. package/dist/_dts/block-form/src/widgets/TextInputWidget.d.ts +20 -0
  187. package/dist/_dts/block-form/src/widgets/TimeField/TimeField.d.ts +23 -0
  188. package/dist/_dts/block-form/src/widgets/TimeField/index.d.ts +3 -0
  189. package/dist/_dts/block-form/src/widgets/TimeField/timeFieldDefaults.d.ts +8 -0
  190. package/dist/_dts/block-form/src/widgets/TimeField/timeFieldSchema.d.ts +9 -0
  191. package/dist/_dts/block-form/src/widgets/ToggleWidget.d.ts +16 -0
  192. package/dist/_dts/block-form/src/widgets/UrlField/UrlField.d.ts +23 -0
  193. package/dist/_dts/block-form/src/widgets/UrlField/index.d.ts +3 -0
  194. package/dist/_dts/block-form/src/widgets/UrlField/urlFieldDefaults.d.ts +8 -0
  195. package/dist/_dts/block-form/src/widgets/UrlField/urlFieldSchema.d.ts +9 -0
  196. package/dist/_dts/block-form/src/widgets/constants.d.ts +58 -0
  197. package/dist/_dts/block-form/src/widgets/groupFieldHelpers.d.ts +61 -0
  198. package/dist/_dts/block-form/src/widgets/index.d.ts +20 -0
  199. package/dist/_dts/block-form/src/widgets/selectValueMapping.d.ts +9 -0
  200. package/dist/_dts/block-form/src/widgets/types/modalConfig.d.ts +18 -0
  201. package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +10 -0
  202. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  203. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +4 -0
  204. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +2 -0
  205. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +1 -1
  206. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -2
  207. package/dist/_dts/blocks/src/system/blocks/blog-post.d.ts +1 -1
  208. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +1 -1
  209. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +1 -1
  210. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +2 -2
  211. package/dist/_dts/blocks/src/system/blocks/columns.d.ts +1 -1
  212. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
  213. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +1 -1
  214. package/dist/_dts/blocks/src/system/blocks/event-details.d.ts +25 -0
  215. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -2
  216. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +2 -2
  217. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +1 -1
  218. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +1 -1
  219. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +1 -1
  220. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +1 -1
  221. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  222. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +6 -6
  223. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +1 -1
  224. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -2
  225. package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
  226. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +1 -1
  227. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  228. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +1 -1
  229. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +1 -1
  230. package/dist/_dts/blocks/src/system/fragments/library/card.d.ts +1 -1
  231. package/dist/_dts/blocks/src/system/fragments/library/ctaRow.d.ts +1 -1
  232. package/dist/_dts/blocks/src/system/fragments/library/feedbackCallout.d.ts +1 -1
  233. package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +1 -1
  234. package/dist/_dts/blocks/src/system/fragments/library/sectionState.d.ts +1 -1
  235. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  236. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +1 -0
  237. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/view.d.ts +4 -1
  238. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.client.d.ts +4 -1
  239. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.server.d.ts +4 -1
  240. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +1 -0
  241. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  242. package/dist/_dts/calendar/src/grid.d.ts +60 -0
  243. package/dist/_dts/calendar/src/group.d.ts +14 -0
  244. package/dist/_dts/calendar/src/index.d.ts +6 -0
  245. package/dist/_dts/calendar/src/lane-packing.d.ts +28 -0
  246. package/dist/_dts/calendar/src/timetable.d.ts +90 -0
  247. package/dist/_dts/calendar/src/timezone.d.ts +19 -0
  248. package/dist/_dts/content-editor/src/index.d.ts +1 -4
  249. package/dist/_dts/core/src/booking-date-time.d.ts +1 -0
  250. package/dist/_dts/core/src/branded.d.ts +18 -0
  251. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +900 -69
  252. package/dist/_dts/editor-blocks/src/index.d.ts +1 -1
  253. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +7 -7
  254. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +1 -2
  255. package/dist/_dts/editor-blocks/src/widgets/link/index.d.ts +1 -0
  256. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +7 -3
  257. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  258. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  259. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  260. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  261. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +4 -0
  262. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +49 -0
  263. package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +6 -0
  264. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +3 -1
  265. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
  266. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +18 -0
  267. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +5 -0
  268. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +33 -0
  269. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +2 -0
  270. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +18 -0
  271. package/dist/_dts/sdk/src/cli/content/entryPaths.d.ts +6 -0
  272. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -0
  273. package/dist/_dts/sdk/src/cli/env.d.ts +2 -1
  274. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +3 -0
  275. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +77 -0
  276. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePlan.d.ts +45 -0
  277. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +22 -0
  278. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +30 -0
  279. package/dist/_dts/sdk/src/cli/merge-remote/entryRemote.d.ts +9 -0
  280. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +50 -0
  281. package/dist/_dts/sdk/src/cli/merge-remote/stableJson.d.ts +3 -0
  282. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +13 -0
  283. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +114 -0
  284. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +63 -0
  285. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +50 -0
  286. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +57 -0
  287. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +7 -0
  288. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +57 -0
  289. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +83 -0
  290. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +83 -0
  291. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +11 -28
  292. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -1
  293. package/dist/_dts/sdk/src/config/dashboard-validation.d.ts +0 -48
  294. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  295. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  296. package/dist/_dts/sdk/src/version.d.ts +1 -1
  297. package/dist/_dts/site-commands/src/adapter.d.ts +23 -0
  298. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +8 -0
  299. package/dist/_dts/site-commands/src/commands.d.ts +2341 -0
  300. package/dist/_dts/site-commands/src/domain.d.ts +104 -0
  301. package/dist/_dts/site-commands/src/exposure.d.ts +41 -0
  302. package/dist/_dts/site-commands/src/guards.d.ts +1 -0
  303. package/dist/_dts/site-commands/src/index.d.ts +10 -0
  304. package/dist/_dts/site-commands/src/metadata.d.ts +503 -0
  305. package/dist/_dts/site-commands/src/planner.d.ts +58 -0
  306. package/dist/_dts/site-commands/src/refContributions.d.ts +10 -0
  307. package/dist/_dts/site-commands/src/refs.d.ts +87 -0
  308. package/dist/_dts/site-commands/src/staticExecutionGaps.d.ts +10 -0
  309. package/dist/_dts/theme-core/src/palette/utils/index.d.ts +1 -0
  310. package/dist/_dts/theme-core/src/palette/utils/onColor.d.ts +2 -0
  311. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +83 -0
  312. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  313. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +89 -12
  314. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +8 -2
  315. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  316. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +3 -2
  317. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -6
  318. package/dist/_dts/ui/src/callout.d.ts +1 -1
  319. package/dist/cli/index.mjs +6446 -1220
  320. package/dist/cli/init-docs/content/cli-reference.md +18 -0
  321. package/dist/client/bookings.mjs +25 -25
  322. package/dist/client/client.mjs +3157 -2858
  323. package/dist/client/hooks.mjs +2608 -2326
  324. package/dist/client/rendering/client.mjs +505 -176
  325. package/dist/client/rendering/islands.mjs +18329 -13012
  326. package/dist/client/rendering.mjs +1204 -903
  327. package/dist/preview-next/before-render.mjs +84 -13
  328. package/dist/preview-next/client/runtime.mjs +3149 -2452
  329. package/dist/preview-next/middleware.mjs +84 -13
  330. package/dist/server/components.mjs +936 -631
  331. package/dist/server/config-validation.mjs +2838 -2556
  332. package/dist/server/config.mjs +2838 -2556
  333. package/dist/server/data.mjs +2608 -2326
  334. package/dist/server/index.mjs +676 -552
  335. package/dist/server/next.mjs +3043 -2738
  336. package/dist/server/page-converter.mjs +201 -51
  337. package/dist/server/prebuild.mjs +1 -1
  338. package/dist/server/rendering/server.mjs +936 -631
  339. package/dist/server/rendering.mjs +936 -631
  340. package/dist/server/routing.mjs +2701 -2426
  341. package/dist/server/server.mjs +2626 -2344
  342. package/dist/server/theme-bridge.mjs +169 -52
  343. package/package.json +2 -1
  344. package/dist/_dts/content-editor/src/ai/patch/allowed.d.ts +0 -2
  345. package/dist/_dts/content-editor/src/ai/patch/diff.d.ts +0 -17
  346. package/dist/_dts/content-editor/src/ai/patch/schema.d.ts +0 -49
  347. package/dist/_dts/path-utils/src/index.d.ts +0 -8
  348. package/dist/_dts/path-utils/src/redirectPaths.d.ts +0 -26
  349. package/dist/_dts/path-utils/src/safeAppPath.d.ts +0 -26
@@ -1370,7 +1370,7 @@ var manifestSchema = z3.object({
1370
1370
  var TEL_RE = /^[+()0-9\s-]{3,}$/;
1371
1371
  var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
1372
1372
  var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
1373
- function assertNever2(value) {
1373
+ function assertNever(value) {
1374
1374
  throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
1375
1375
  }
1376
1376
  function validationContext(options = {}) {
@@ -1422,7 +1422,7 @@ function fieldIssueToMessage(issue2) {
1422
1422
  case "invalidReference":
1423
1423
  return `${issue2.label} must reference a valid item`;
1424
1424
  default:
1425
- return assertNever2(issue2);
1425
+ return assertNever(issue2);
1426
1426
  }
1427
1427
  }
1428
1428
  function pluralize(label, count) {
@@ -1507,7 +1507,7 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
1507
1507
  case "entryPicker":
1508
1508
  return makePlan("passthrough", "unknown", field, path, false, []);
1509
1509
  default:
1510
- return assertNever2(field);
1510
+ return assertNever(field);
1511
1511
  }
1512
1512
  }
1513
1513
  function commonConstraints(required, ...specific) {
@@ -1564,7 +1564,7 @@ function resolveSelectConstraintSource(field) {
1564
1564
  case "sdk":
1565
1565
  return { kind: "runtime", source: source.kind };
1566
1566
  default:
1567
- return assertNever2(source);
1567
+ return assertNever(source);
1568
1568
  }
1569
1569
  }
1570
1570
  function normalizeFieldValue(plan, value, ctx) {
@@ -1585,7 +1585,7 @@ function normalizeFieldValue(plan, value, ctx) {
1585
1585
  case "passthrough":
1586
1586
  return value;
1587
1587
  default:
1588
- return assertNever2(plan);
1588
+ return assertNever(plan);
1589
1589
  }
1590
1590
  }
1591
1591
  function normalizeObjectChildren(children, value, ctx) {
@@ -1644,7 +1644,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
1644
1644
  case "passthrough":
1645
1645
  return [];
1646
1646
  default:
1647
- return assertNever2(plan);
1647
+ return assertNever(plan);
1648
1648
  }
1649
1649
  }
1650
1650
  function shouldRequireValue(plan, value, ctx) {
@@ -1687,7 +1687,7 @@ function validateStringConstraint(plan, constraint, value) {
1687
1687
  case "slugFormat":
1688
1688
  return SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
1689
1689
  default:
1690
- return assertNever2(constraint);
1690
+ return assertNever(constraint);
1691
1691
  }
1692
1692
  }
1693
1693
  function validateNumberPlan(plan, value) {
@@ -1704,7 +1704,7 @@ function validateNumberConstraint(plan, constraint, value) {
1704
1704
  case "numberMax":
1705
1705
  return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
1706
1706
  default:
1707
- return assertNever2(constraint);
1707
+ return assertNever(constraint);
1708
1708
  }
1709
1709
  }
1710
1710
  function validateSelectPlan(plan, value) {
@@ -1724,7 +1724,7 @@ function validateRepeaterPlan(plan, value, ctx) {
1724
1724
  case "maxItems":
1725
1725
  return value.length > constraint.maximum ? [issue(plan, "tooManyItems", { maximum: constraint.maximum, itemLabel: "item" })] : [];
1726
1726
  default:
1727
- return assertNever2(constraint);
1727
+ return assertNever(constraint);
1728
1728
  }
1729
1729
  });
1730
1730
  return [
@@ -1791,7 +1791,7 @@ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
1791
1791
  path
1792
1792
  };
1793
1793
  default:
1794
- return assertNever2(plan);
1794
+ return assertNever(plan);
1795
1795
  }
1796
1796
  }
1797
1797
  function rebaseFieldPath(path, fromPrefix, toPrefix) {
@@ -1871,7 +1871,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
1871
1871
  zodCtx.addIssue({ code: "custom", message });
1872
1872
  return;
1873
1873
  default:
1874
- assertNever2(validationIssue);
1874
+ assertNever(validationIssue);
1875
1875
  }
1876
1876
  }
1877
1877
  function compilePattern(pattern) {
@@ -1995,6 +1995,144 @@ function resolveVariantKey(manifest, content) {
1995
1995
  return null;
1996
1996
  }
1997
1997
 
1998
+ // ../theme-core/src/palette/utils/colorConversion.ts
1999
+ var clamp01 = (x) => Math.max(0, Math.min(1, x));
2000
+ var mod = (a, n) => (a % n + n) % n;
2001
+ var deg = (x) => mod(x, 360);
2002
+ function hexToRgb(hex) {
2003
+ const h = hex.replace(/^#/, "");
2004
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
2005
+ if (m.length !== 6) throw new Error("Bad hex");
2006
+ const int = parseInt(m, 16);
2007
+ return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
2008
+ }
2009
+ function rgbToHex(r2, g, b) {
2010
+ const to = (n) => Math.round(n).toString(16).padStart(2, "0");
2011
+ return `#${to(r2)}${to(g)}${to(b)}`;
2012
+ }
2013
+ function srgbToLinear(u) {
2014
+ const x = u / 255;
2015
+ return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
2016
+ }
2017
+ function linearToSrgb(x) {
2018
+ const y = x <= 31308e-7 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055;
2019
+ return clamp01(y) * 255;
2020
+ }
2021
+ function rgbToHsl(r2, g, b) {
2022
+ const R = r2 / 255, G = g / 255, B = b / 255;
2023
+ const max = Math.max(R, G, B), min = Math.min(R, G, B);
2024
+ const d = max - min;
2025
+ let h = 0;
2026
+ if (d !== 0) {
2027
+ switch (max) {
2028
+ case R:
2029
+ h = (G - B) / d + (G < B ? 6 : 0);
2030
+ break;
2031
+ case G:
2032
+ h = (B - R) / d + 2;
2033
+ break;
2034
+ case B:
2035
+ h = (R - G) / d + 4;
2036
+ break;
2037
+ }
2038
+ h *= 60;
2039
+ }
2040
+ const l = (max + min) / 2;
2041
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
2042
+ return { h, s, l };
2043
+ }
2044
+ function srgbToOklab(r2, g, b) {
2045
+ const R = srgbToLinear(r2), G = srgbToLinear(g), B = srgbToLinear(b);
2046
+ const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
2047
+ const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
2048
+ const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
2049
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
2050
+ const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
2051
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
2052
+ const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
2053
+ return { L, a, b: b2 };
2054
+ }
2055
+ function oklabToSrgb(L, a, b) {
2056
+ const l_ = Math.pow(L + 0.3963377774 * a + 0.2158037573 * b, 3);
2057
+ const m_ = Math.pow(L - 0.1055613458 * a - 0.0638541728 * b, 3);
2058
+ const s_ = Math.pow(L - 0.0894841775 * a - 1.291485548 * b, 3);
2059
+ const R = 4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_;
2060
+ const G = -1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_;
2061
+ const B = -0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_;
2062
+ return { r: linearToSrgb(R), g: linearToSrgb(G), b: linearToSrgb(B) };
2063
+ }
2064
+ function oklabToOklch(L, a, b) {
2065
+ const C = Math.sqrt(a * a + b * b);
2066
+ const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
2067
+ return { L, C, h };
2068
+ }
2069
+ function oklchToOklab(L, C, h) {
2070
+ const hr = h * Math.PI / 180;
2071
+ const a = C * Math.cos(hr);
2072
+ const b = C * Math.sin(hr);
2073
+ return { L, a, b };
2074
+ }
2075
+ function inSRGB(r2, g, b) {
2076
+ return r2 >= 0 && r2 <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255;
2077
+ }
2078
+ function oklchToHexGamut(L, C, h) {
2079
+ let lo = 0, hi = C, best = 0;
2080
+ for (let i = 0; i < 18; i++) {
2081
+ const mid = (lo + hi) / 2;
2082
+ const { a: a2, b: b2 } = oklchToOklab(L, mid, h);
2083
+ const { r: r3, g: g2, b: bb2 } = oklabToSrgb(L, a2, b2);
2084
+ if (inSRGB(r3, g2, bb2)) {
2085
+ best = mid;
2086
+ lo = mid;
2087
+ } else {
2088
+ hi = mid;
2089
+ }
2090
+ }
2091
+ const { a, b } = oklchToOklab(L, best, h);
2092
+ const { r: r2, g, b: bb } = oklabToSrgb(L, a, b);
2093
+ return rgbToHex(r2, g, bb);
2094
+ }
2095
+ function featuresFromHex(hex) {
2096
+ const { r: r2, g, b } = hexToRgb(hex);
2097
+ const { h, s, l } = rgbToHsl(r2, g, b);
2098
+ const { L, a, b: b2 } = srgbToOklab(r2, g, b);
2099
+ const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
2100
+ const max = Math.max(r2, g, b);
2101
+ const v = max / 255;
2102
+ const Y = 0.2126 * srgbToLinear(r2) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
2103
+ const chroma = s;
2104
+ return { r: r2, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
2105
+ }
2106
+
2107
+ // ../theme-core/src/palette/utils/contrast.ts
2108
+ function relativeLuminance(r2, g, b) {
2109
+ const R = srgbToLinear(r2), G = srgbToLinear(g), B = srgbToLinear(b);
2110
+ return 0.2126 * R + 0.7152 * G + 0.0722 * B;
2111
+ }
2112
+
2113
+ // ../theme-core/src/palette/utils/onColor.ts
2114
+ var BACKGROUND_ROLE_NAMES = /* @__PURE__ */ new Set([
2115
+ "primary",
2116
+ "secondary",
2117
+ "accent",
2118
+ "success",
2119
+ "warning",
2120
+ "destructive",
2121
+ "info",
2122
+ "background",
2123
+ "surface",
2124
+ "surfaceAlt",
2125
+ "muted",
2126
+ "neutral"
2127
+ ]);
2128
+ function onColorTokenName(backgroundToken) {
2129
+ return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
2130
+ }
2131
+ function isOnColorBackgroundCandidateToken(token) {
2132
+ const role = token.match(/^(.*?)(?:-\d{2,3})?$/)?.[1] ?? token;
2133
+ return BACKGROUND_ROLE_NAMES.has(role);
2134
+ }
2135
+
1998
2136
  // ../theme-core/src/site-styles/appearancePresetResolution.ts
1999
2137
  function assertValidOptionGroups(preset2) {
2000
2138
  preset2.optionGroups?.forEach((group) => {
@@ -7151,11 +7289,21 @@ function asHeaderLookId(value) {
7151
7289
  return value;
7152
7290
  }
7153
7291
  function baseHeader(theme) {
7292
+ const {
7293
+ navLinkStyle: _navLinkStyle,
7294
+ dropdownStyle: _dropdownStyle,
7295
+ ctaVariant: _ctaVariant,
7296
+ navContainer: _navContainer,
7297
+ container: _container,
7298
+ shadow: _shadow,
7299
+ logo: _logo,
7300
+ logoText: _logoText,
7301
+ border: _border,
7302
+ ...header
7303
+ } = theme.header;
7154
7304
  return {
7155
- ...theme.header,
7156
- navLinkStyle: void 0,
7157
- dropdownStyle: void 0,
7158
- ctaVariant: void 0
7305
+ ...header,
7306
+ navContainer: { type: "none", tint: null, opacity: 0.15 }
7159
7307
  };
7160
7308
  }
7161
7309
  function solidBrandHeader(theme) {
@@ -7606,6 +7754,9 @@ var curatedSiteStyleIdValues = [
7606
7754
  "site-style:bright-community",
7607
7755
  "site-style:quiet-luxury",
7608
7756
  "site-style:practical-services",
7757
+ "site-style:quiet-practice",
7758
+ "site-style:personal-retreat-journal",
7759
+ "site-style:tactile-workshop",
7609
7760
  "site-style:modern-wellness",
7610
7761
  "site-style:bold-launch",
7611
7762
  "site-style:south-west-twerk-school"
@@ -7688,7 +7839,8 @@ function defineCuratedSiteStyle(input) {
7688
7839
  name: input.name,
7689
7840
  description: input.description,
7690
7841
  generationBrief: input.generationBrief,
7691
- selectionKeywords: input.selectionKeywords ?? [],
7842
+ selectionKeywordRules: input.selectionKeywordRules ?? [],
7843
+ siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
7692
7844
  template: {
7693
7845
  id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
7694
7846
  name: input.name,
@@ -7832,12 +7984,13 @@ var curatedSiteStyles = [
7832
7984
  name: "Quiet Luxury",
7833
7985
  description: "Minimal, confident, and refined for premium experiences and private services.",
7834
7986
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
7835
- selectionKeywords: [
7836
- "luxury",
7837
- "premium",
7838
- "boutique",
7839
- "bespoke",
7840
- "exclusive"
7987
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
7988
+ selectionKeywordRules: [
7989
+ { kind: "word", value: "luxury" },
7990
+ { kind: "word", value: "premium" },
7991
+ { kind: "word", value: "boutique" },
7992
+ { kind: "word", value: "bespoke" },
7993
+ { kind: "word", value: "exclusive" }
7841
7994
  ],
7842
7995
  tokenRecipes: {
7843
7996
  palette: "high-contrast",
@@ -7866,13 +8019,14 @@ var curatedSiteStyles = [
7866
8019
  name: "Practical Services",
7867
8020
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
7868
8021
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
7869
- selectionKeywords: [
7870
- "repair",
7871
- "plumb",
7872
- "electric",
7873
- "cleaning",
7874
- "landscap",
7875
- "contractor"
8022
+ siteCreatorSelection: { kind: "primary_goal_support" },
8023
+ selectionKeywordRules: [
8024
+ { kind: "word", value: "repair" },
8025
+ { kind: "substring", value: "plumb" },
8026
+ { kind: "substring", value: "electric" },
8027
+ { kind: "word", value: "cleaning" },
8028
+ { kind: "substring", value: "landscap" },
8029
+ { kind: "substring", value: "contractor" }
7876
8030
  ],
7877
8031
  tokenRecipes: {
7878
8032
  palette: "brand-led",
@@ -7923,18 +8077,134 @@ var curatedSiteStyles = [
7923
8077
  paletteChoice("warm-neutral-forest")
7924
8078
  ]
7925
8079
  }),
8080
+ defineCuratedSiteStyle({
8081
+ id: "site-style:quiet-practice",
8082
+ name: "Quiet Practice",
8083
+ description: "Grounded, calm, and practical for small appointment-first practices.",
8084
+ generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
8085
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
8086
+ selectionKeywordRules: [
8087
+ { kind: "substring", value: "massage" },
8088
+ { kind: "word", value: "bodywork" },
8089
+ { kind: "phrase", value: "appointment practice" },
8090
+ { kind: "phrase", value: "appointment-first" },
8091
+ { kind: "substring", value: "practitioner" },
8092
+ { kind: "substring", value: "therap" },
8093
+ { kind: "substring", value: "clinic" },
8094
+ { kind: "phrase", value: "wellness practice" }
8095
+ ],
8096
+ tokenRecipes: {
8097
+ palette: "soft-natural",
8098
+ contrast: "standard",
8099
+ radius: "soft",
8100
+ shadow: "subtle",
8101
+ typography: "clean-sans",
8102
+ spacing: "regular",
8103
+ motion: "subtle"
8104
+ },
8105
+ compositionBudget: quietBudget,
8106
+ recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
8107
+ buttonPersonalityChoices: [
8108
+ buttonChoice("pebble"),
8109
+ buttonChoice("soft-pill"),
8110
+ buttonChoice("editorial-link")
8111
+ ],
8112
+ paletteVariantChoices: [
8113
+ paletteChoice("soft-natural-stone"),
8114
+ paletteChoice("soft-natural-sage"),
8115
+ paletteChoice("warm-neutral-clay")
8116
+ ]
8117
+ }),
8118
+ defineCuratedSiteStyle({
8119
+ id: "site-style:personal-retreat-journal",
8120
+ name: "Personal Retreat Journal",
8121
+ description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
8122
+ generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
8123
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
8124
+ selectionKeywordRules: [
8125
+ { kind: "substring", value: "retreat" },
8126
+ { kind: "phrase", value: "solo practitioner" },
8127
+ { kind: "phrase", value: "personal brand" },
8128
+ { kind: "substring", value: "teacher" },
8129
+ { kind: "substring", value: "coach" },
8130
+ { kind: "phrase", value: "retreat resources" },
8131
+ { kind: "substring", value: "journal" }
8132
+ ],
8133
+ tokenRecipes: {
8134
+ palette: "warm-neutral",
8135
+ contrast: "standard",
8136
+ radius: "soft",
8137
+ shadow: "subtle",
8138
+ typography: "serif-editorial",
8139
+ spacing: "airy",
8140
+ motion: "subtle"
8141
+ },
8142
+ compositionBudget: balancedBudget,
8143
+ recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
8144
+ buttonPersonalityChoices: [
8145
+ buttonChoice("editorial-link"),
8146
+ buttonChoice("soft-pill"),
8147
+ buttonChoice("brushed-wash")
8148
+ ],
8149
+ paletteVariantChoices: [
8150
+ paletteChoice("warm-neutral-forest"),
8151
+ paletteChoice("warm-neutral-clay"),
8152
+ paletteChoice("soft-natural-stone")
8153
+ ]
8154
+ }),
8155
+ defineCuratedSiteStyle({
8156
+ id: "site-style:tactile-workshop",
8157
+ name: "Tactile Workshop",
8158
+ description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
8159
+ generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
8160
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
8161
+ selectionKeywordRules: [
8162
+ { kind: "substring", value: "ceramic" },
8163
+ { kind: "word", value: "pottery" },
8164
+ { kind: "phrase", value: "maker studio" },
8165
+ { kind: "phrase", value: "craft class" },
8166
+ { kind: "phrase", value: "craft workshop" },
8167
+ { kind: "word", value: "clay" },
8168
+ { kind: "word", value: "kiln" }
8169
+ ],
8170
+ tokenRecipes: {
8171
+ palette: "brand-led",
8172
+ contrast: "standard",
8173
+ radius: "soft",
8174
+ shadow: "subtle",
8175
+ typography: "friendly-sans",
8176
+ spacing: "regular",
8177
+ motion: "subtle"
8178
+ },
8179
+ compositionBudget: balancedBudget,
8180
+ recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
8181
+ recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
8182
+ buttonPersonalityChoices: [
8183
+ buttonChoice("pebble"),
8184
+ buttonChoice("confident-chip"),
8185
+ buttonChoice("ink-stamp"),
8186
+ buttonChoice("editorial-link")
8187
+ ],
8188
+ paletteVariantChoices: [
8189
+ paletteChoice("brand-led-warm"),
8190
+ paletteChoice("brand-led-cool"),
8191
+ paletteChoice("soft-natural-watercolor"),
8192
+ paletteChoice("warm-neutral-clay")
8193
+ ]
8194
+ }),
7926
8195
  defineCuratedSiteStyle({
7927
8196
  id: "site-style:bold-launch",
7928
8197
  name: "Bold Launch",
7929
8198
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
7930
8199
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
7931
- selectionKeywords: [
7932
- "launch",
7933
- "campaign",
7934
- "preorder",
7935
- "pre-order",
7936
- "waitlist",
7937
- "drop"
8200
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
8201
+ selectionKeywordRules: [
8202
+ { kind: "substring", value: "launch" },
8203
+ { kind: "substring", value: "campaign" },
8204
+ { kind: "word", value: "preorder" },
8205
+ { kind: "phrase", value: "pre-order" },
8206
+ { kind: "substring", value: "waitlist" },
8207
+ { kind: "word", value: "drop" }
7938
8208
  ],
7939
8209
  tokenRecipes: {
7940
8210
  palette: "high-contrast",
@@ -7965,15 +8235,6 @@ var curatedSiteStyles = [
7965
8235
  name: "South West Twerk School",
7966
8236
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
7967
8237
  generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
7968
- selectionKeywords: [
7969
- "dance",
7970
- "classes",
7971
- "workshop",
7972
- "school",
7973
- "movement",
7974
- "performance",
7975
- "community"
7976
- ],
7977
8238
  tokenRecipes: {
7978
8239
  palette: "brand-led",
7979
8240
  contrast: "maximum",
@@ -8216,6 +8477,148 @@ var modernMinimalTheme = {
8216
8477
  }
8217
8478
  };
8218
8479
 
8480
+ // ../theme-core/src/palette/generateShades.ts
8481
+ function generateShades(hexColor, name) {
8482
+ const shadeSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
8483
+ const base = featuresFromHex(hexColor);
8484
+ const hue = base.okH;
8485
+ const baseChroma = base.okC;
8486
+ const toneMap = {
8487
+ 50: 0.975,
8488
+ 100: 0.945,
8489
+ 200: 0.89,
8490
+ 300: 0.82,
8491
+ 400: 0.74,
8492
+ 500: 0.66,
8493
+ 600: 0.58,
8494
+ 700: 0.49,
8495
+ 800: 0.4,
8496
+ 900: 0.28,
8497
+ 950: 0.16
8498
+ };
8499
+ const shadeDefs = shadeSteps.map((step, idx) => {
8500
+ const t = idx / (shadeSteps.length - 1);
8501
+ const L = toneMap[step];
8502
+ const chromaFactor = 0.06 + 0.94 * Math.sin(Math.PI * t);
8503
+ const C = baseChroma * chromaFactor;
8504
+ return {
8505
+ name: `${name}-${step}`,
8506
+ hex: oklchToHexGamut(L, C, hue)
8507
+ };
8508
+ });
8509
+ shadeDefs.push({ name, hex: hexColor });
8510
+ return shadeDefs;
8511
+ }
8512
+
8513
+ // ../theme-core/src/palette/neutralScale.ts
8514
+ function generateNeutralScale({
8515
+ background,
8516
+ steps = 11,
8517
+ warm = false
8518
+ }) {
8519
+ const isDark = background === "#000000" || background.startsWith("#0") || background.startsWith("#1");
8520
+ const shadeNames = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
8521
+ const count = Math.min(steps, shadeNames.length);
8522
+ const scale = [];
8523
+ for (let i = 0; i < count; i++) {
8524
+ const t = i / (count - 1);
8525
+ const tone = isDark ? mix(0.06, 0.92, t) : mix(0.98, 0.1, t);
8526
+ const hex = oklchToHexGamut(tone, 0.02, warm ? 85 : 250);
8527
+ const name = `neutral-${shadeNames[i]}`;
8528
+ scale.push({ name, hex });
8529
+ }
8530
+ return scale;
8531
+ }
8532
+ function mix(a, b, t) {
8533
+ return a + (b - a) * Math.max(0, Math.min(1, t));
8534
+ }
8535
+
8536
+ // ../theme-core/src/palette/utils/textColor.ts
8537
+ function pickBlackOrWhiteTextColor(background, minContrast = 4.5) {
8538
+ const { r: r2, g, b } = parseColorToRgb(background);
8539
+ const luminance = relativeLuminance(r2, g, b);
8540
+ const blackContrast = (luminance + 0.05) / 0.05;
8541
+ const whiteContrast = 1.05 / (luminance + 0.05);
8542
+ if (blackContrast >= minContrast && whiteContrast < minContrast) {
8543
+ return "#000000";
8544
+ }
8545
+ if (whiteContrast >= minContrast && blackContrast < minContrast) {
8546
+ return "#FFFFFF";
8547
+ }
8548
+ return blackContrast >= whiteContrast ? "#000000" : "#FFFFFF";
8549
+ }
8550
+ function getTextColorForBackground(background) {
8551
+ return pickBlackOrWhiteTextColor(background);
8552
+ }
8553
+ function parseColorToRgb(input) {
8554
+ const trimmed = input.trim();
8555
+ if (trimmed.startsWith("#")) {
8556
+ return hexToRgb(trimmed);
8557
+ }
8558
+ const rgbMatch = trimmed.match(
8559
+ /^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/i
8560
+ );
8561
+ if (rgbMatch?.[1] && rgbMatch[2] && rgbMatch[3]) {
8562
+ return {
8563
+ r: clamp255(Number(rgbMatch[1])),
8564
+ g: clamp255(Number(rgbMatch[2])),
8565
+ b: clamp255(Number(rgbMatch[3]))
8566
+ };
8567
+ }
8568
+ throw new Error("Unsupported color format");
8569
+ }
8570
+ function clamp255(value) {
8571
+ if (Number.isNaN(value)) return 0;
8572
+ return Math.max(0, Math.min(255, value));
8573
+ }
8574
+
8575
+ // ../theme-core/src/palette/expandPalette.ts
8576
+ function colorsToMap(palette) {
8577
+ const map = {};
8578
+ for (const c of palette.colors) {
8579
+ map[c.name] = c.hex;
8580
+ }
8581
+ return map;
8582
+ }
8583
+ function isBackgroundDark(hex) {
8584
+ try {
8585
+ return featuresFromHex(hex).Y < 0.5;
8586
+ } catch {
8587
+ return false;
8588
+ }
8589
+ }
8590
+ function expandPalette(palette) {
8591
+ const base = colorsToMap(palette);
8592
+ const expanded = { ...base };
8593
+ const background = base.background || base.surface || "#ffffff";
8594
+ const neutral2 = generateNeutralScale({ background, steps: 11, warm: false });
8595
+ neutral2.forEach((n) => {
8596
+ expanded[n.name] = n.hex;
8597
+ });
8598
+ for (const [name, hex] of Object.entries(base)) {
8599
+ if (hex) {
8600
+ const shades = generateShades(hex, name);
8601
+ shades.forEach((shade) => {
8602
+ expanded[shade.name] = shade.hex;
8603
+ });
8604
+ }
8605
+ }
8606
+ if (base.text) expanded.body = base.text;
8607
+ if (base.danger && !base.destructive) {
8608
+ expanded.destructive = base.danger;
8609
+ }
8610
+ const isDark = base.background ? isBackgroundDark(base.background) : false;
8611
+ const isDarkMode = palette.meta?.mode === "dark" || isDark;
8612
+ expanded.mutedText = isDarkMode ? expanded["neutral-600"] ?? "#666" : expanded["neutral-500"] ?? "#888";
8613
+ for (const [token, hex] of Object.entries({ ...expanded })) {
8614
+ if (!hex || !isOnColorBackgroundCandidateToken(token)) continue;
8615
+ const onToken = onColorTokenName(token);
8616
+ if (expanded[onToken]) continue;
8617
+ expanded[onToken] = getTextColorForBackground(hex);
8618
+ }
8619
+ return expanded;
8620
+ }
8621
+
8219
8622
  // ../theme-core/src/site-styles/designState.ts
8220
8623
  import { z as z24 } from "zod";
8221
8624
 
@@ -8384,25 +8787,19 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
8384
8787
  "muted-band": {
8385
8788
  background: {
8386
8789
  type: "color",
8387
- color: "muted",
8388
- textColor: "text",
8389
- headingColor: "text"
8790
+ color: "muted"
8390
8791
  }
8391
8792
  },
8392
8793
  "accent-band": {
8393
8794
  background: {
8394
8795
  type: "color",
8395
- color: "primary",
8396
- textColor: "primaryForeground",
8397
- headingColor: "primaryForeground"
8796
+ color: "primary"
8398
8797
  }
8399
8798
  },
8400
8799
  "brand-depth-band": {
8401
8800
  background: {
8402
8801
  type: "color",
8403
- color: "primary-800",
8404
- textColor: "primaryForeground",
8405
- headingColor: "primaryForeground"
8802
+ color: "primary-800"
8406
8803
  }
8407
8804
  },
8408
8805
  "hero-image": {
@@ -14624,6 +15021,16 @@ var jsonArrayTransform = {
14624
15021
  return "";
14625
15022
  }
14626
15023
  };
15024
+ var csvTransform = {
15025
+ id: "value.csv",
15026
+ kind: "formatter",
15027
+ summary: "Normalize a string or array of strings into a comma-separated list",
15028
+ run: (value) => {
15029
+ const rawValues = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
15030
+ const normalized = rawValues.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
15031
+ return normalized.length > 0 ? Array.from(new Set(normalized)).join(",") : "";
15032
+ }
15033
+ };
14627
15034
  var marqueeLoopOptionsSchema = z33.object({
14628
15035
  minItems: z33.number().int().min(1).default(10)
14629
15036
  });
@@ -14649,6 +15056,7 @@ var formattingTransforms = [
14649
15056
  dateFormatShort,
14650
15057
  arrayLengthTransform,
14651
15058
  jsonArrayTransform,
15059
+ csvTransform,
14652
15060
  marqueeLoopTransform
14653
15061
  ];
14654
15062
 
@@ -15132,117 +15540,6 @@ var uiTransforms = [
15132
15540
 
15133
15541
  // ../blocks/src/system/transforms/registry/layout.ts
15134
15542
  import { z as z35 } from "zod";
15135
-
15136
- // ../theme-core/src/palette/utils/colorConversion.ts
15137
- var clamp01 = (x) => Math.max(0, Math.min(1, x));
15138
- var mod = (a, n) => (a % n + n) % n;
15139
- var deg = (x) => mod(x, 360);
15140
- function hexToRgb(hex) {
15141
- const h = hex.replace(/^#/, "");
15142
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
15143
- if (m.length !== 6) throw new Error("Bad hex");
15144
- const int = parseInt(m, 16);
15145
- return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
15146
- }
15147
- function rgbToHex(r2, g, b) {
15148
- const to = (n) => Math.round(n).toString(16).padStart(2, "0");
15149
- return `#${to(r2)}${to(g)}${to(b)}`;
15150
- }
15151
- function srgbToLinear(u) {
15152
- const x = u / 255;
15153
- return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
15154
- }
15155
- function linearToSrgb(x) {
15156
- const y = x <= 31308e-7 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055;
15157
- return clamp01(y) * 255;
15158
- }
15159
- function rgbToHsl(r2, g, b) {
15160
- const R = r2 / 255, G = g / 255, B = b / 255;
15161
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
15162
- const d = max - min;
15163
- let h = 0;
15164
- if (d !== 0) {
15165
- switch (max) {
15166
- case R:
15167
- h = (G - B) / d + (G < B ? 6 : 0);
15168
- break;
15169
- case G:
15170
- h = (B - R) / d + 2;
15171
- break;
15172
- case B:
15173
- h = (R - G) / d + 4;
15174
- break;
15175
- }
15176
- h *= 60;
15177
- }
15178
- const l = (max + min) / 2;
15179
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
15180
- return { h, s, l };
15181
- }
15182
- function srgbToOklab(r2, g, b) {
15183
- const R = srgbToLinear(r2), G = srgbToLinear(g), B = srgbToLinear(b);
15184
- const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
15185
- const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
15186
- const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
15187
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
15188
- const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
15189
- const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
15190
- const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
15191
- return { L, a, b: b2 };
15192
- }
15193
- function oklabToSrgb(L, a, b) {
15194
- const l_ = Math.pow(L + 0.3963377774 * a + 0.2158037573 * b, 3);
15195
- const m_ = Math.pow(L - 0.1055613458 * a - 0.0638541728 * b, 3);
15196
- const s_ = Math.pow(L - 0.0894841775 * a - 1.291485548 * b, 3);
15197
- const R = 4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_;
15198
- const G = -1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_;
15199
- const B = -0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_;
15200
- return { r: linearToSrgb(R), g: linearToSrgb(G), b: linearToSrgb(B) };
15201
- }
15202
- function oklabToOklch(L, a, b) {
15203
- const C = Math.sqrt(a * a + b * b);
15204
- const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
15205
- return { L, C, h };
15206
- }
15207
- function oklchToOklab(L, C, h) {
15208
- const hr = h * Math.PI / 180;
15209
- const a = C * Math.cos(hr);
15210
- const b = C * Math.sin(hr);
15211
- return { L, a, b };
15212
- }
15213
- function inSRGB(r2, g, b) {
15214
- return r2 >= 0 && r2 <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255;
15215
- }
15216
- function oklchToHexGamut(L, C, h) {
15217
- let lo = 0, hi = C, best = 0;
15218
- for (let i = 0; i < 18; i++) {
15219
- const mid = (lo + hi) / 2;
15220
- const { a: a2, b: b2 } = oklchToOklab(L, mid, h);
15221
- const { r: r3, g: g2, b: bb2 } = oklabToSrgb(L, a2, b2);
15222
- if (inSRGB(r3, g2, bb2)) {
15223
- best = mid;
15224
- lo = mid;
15225
- } else {
15226
- hi = mid;
15227
- }
15228
- }
15229
- const { a, b } = oklchToOklab(L, best, h);
15230
- const { r: r2, g, b: bb } = oklabToSrgb(L, a, b);
15231
- return rgbToHex(r2, g, bb);
15232
- }
15233
- function featuresFromHex(hex) {
15234
- const { r: r2, g, b } = hexToRgb(hex);
15235
- const { h, s, l } = rgbToHsl(r2, g, b);
15236
- const { L, a, b: b2 } = srgbToOklab(r2, g, b);
15237
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
15238
- const max = Math.max(r2, g, b);
15239
- const v = max / 255;
15240
- const Y = 0.2126 * srgbToLinear(r2) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
15241
- const chroma = s;
15242
- return { r: r2, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
15243
- }
15244
-
15245
- // ../blocks/src/system/transforms/registry/layout.ts
15246
15543
  var joinClasses4 = (parts) => parts.filter(
15247
15544
  (part) => typeof part === "string" && part.trim().length > 0
15248
15545
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -19222,7 +19519,10 @@ var eventDetailsManifest = createBlockManifest({
19222
19519
  $bind: { from: "content.showAcceptedMemberships", fallback: true }
19223
19520
  },
19224
19521
  sitePasses: { $bind: { from: "data.eventDetailsData.sitePasses" } },
19225
- siteMemberships: { $bind: { from: "data.eventDetailsData.siteMemberships" } }
19522
+ siteMemberships: { $bind: { from: "data.eventDetailsData.siteMemberships" } },
19523
+ autoApplyDiscount: {
19524
+ $bind: { from: "data.eventDetailsData.autoApplyDiscount", fallback: null }
19525
+ }
19226
19526
  })
19227
19527
  ],
19228
19528
  { gap: "lg" }
@@ -19239,13 +19539,32 @@ var occurrenceContextSchema2 = z49.object({
19239
19539
  capacityOverride: z49.number().nullable().optional(),
19240
19540
  overrides: z49.record(z49.string(), z49.unknown()).nullable().optional()
19241
19541
  }).nullable();
19542
+ var eventAutoApplyDiscountPreviewBaseSchema = z49.object({
19543
+ id: z49.string(),
19544
+ publicLabel: z49.string(),
19545
+ description: z49.string().nullable(),
19546
+ minTicketsRequired: z49.number().nullable()
19547
+ });
19548
+ var eventAutoApplyDiscountPreviewSchema = z49.discriminatedUnion("discountType", [
19549
+ eventAutoApplyDiscountPreviewBaseSchema.extend({
19550
+ discountType: z49.literal("percent"),
19551
+ discountPercent: z49.number(),
19552
+ discountAmountCents: z49.null()
19553
+ }),
19554
+ eventAutoApplyDiscountPreviewBaseSchema.extend({
19555
+ discountType: z49.literal("fixed"),
19556
+ discountPercent: z49.null(),
19557
+ discountAmountCents: z49.number()
19558
+ })
19559
+ ]);
19242
19560
  var eventDetailsBlockDefinition = {
19243
19561
  manifest: eventDetailsManifest,
19244
19562
  dataSchemas: {
19245
19563
  eventDetailsData: z49.object({
19246
19564
  events: publicEventsArraySchema,
19247
19565
  sitePasses: z49.object({ passes: z49.array(publicPassProductSchema) }),
19248
- siteMemberships: z49.object({ memberships: z49.array(publicMembershipProductSchema) })
19566
+ siteMemberships: z49.object({ memberships: z49.array(publicMembershipProductSchema) }),
19567
+ autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional().default(null)
19249
19568
  }).optional(),
19250
19569
  occurrenceContext: occurrenceContextSchema2.optional()
19251
19570
  },
@@ -20169,51 +20488,6 @@ function resolveEventCta(event, buttonText) {
20169
20488
  return { label, href: event.path, hidden: false };
20170
20489
  }
20171
20490
 
20172
- // ../theme-core/src/palette/utils/contrast.ts
20173
- function relativeLuminance(r2, g, b) {
20174
- const R = srgbToLinear(r2), G = srgbToLinear(g), B = srgbToLinear(b);
20175
- return 0.2126 * R + 0.7152 * G + 0.0722 * B;
20176
- }
20177
-
20178
- // ../theme-core/src/palette/utils/textColor.ts
20179
- function pickBlackOrWhiteTextColor(background, minContrast = 4.5) {
20180
- const { r: r2, g, b } = parseColorToRgb(background);
20181
- const luminance = relativeLuminance(r2, g, b);
20182
- const blackContrast = (luminance + 0.05) / 0.05;
20183
- const whiteContrast = 1.05 / (luminance + 0.05);
20184
- if (blackContrast >= minContrast && whiteContrast < minContrast) {
20185
- return "#000000";
20186
- }
20187
- if (whiteContrast >= minContrast && blackContrast < minContrast) {
20188
- return "#FFFFFF";
20189
- }
20190
- return blackContrast >= whiteContrast ? "#000000" : "#FFFFFF";
20191
- }
20192
- function getTextColorForBackground(background) {
20193
- return pickBlackOrWhiteTextColor(background);
20194
- }
20195
- function parseColorToRgb(input) {
20196
- const trimmed = input.trim();
20197
- if (trimmed.startsWith("#")) {
20198
- return hexToRgb(trimmed);
20199
- }
20200
- const rgbMatch = trimmed.match(
20201
- /^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/i
20202
- );
20203
- if (rgbMatch?.[1] && rgbMatch[2] && rgbMatch[3]) {
20204
- return {
20205
- r: clamp255(Number(rgbMatch[1])),
20206
- g: clamp255(Number(rgbMatch[2])),
20207
- b: clamp255(Number(rgbMatch[3]))
20208
- };
20209
- }
20210
- throw new Error("Unsupported color format");
20211
- }
20212
- function clamp255(value) {
20213
- if (Number.isNaN(value)) return 0;
20214
- return Math.max(0, Math.min(255, value));
20215
- }
20216
-
20217
20491
  // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
20218
20492
  function r(e) {
20219
20493
  var t, f, n = "";
@@ -22143,7 +22417,12 @@ var eventListingBlockDefinition = {
22143
22417
  detailLevel: "listing",
22144
22418
  kind: { $bind: { from: "content.kind" } },
22145
22419
  eventSurface: { $bind: { from: "content.eventSurface" } },
22146
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
22420
+ eventPresets: {
22421
+ $bind: {
22422
+ from: "content.filterEventPresets",
22423
+ transforms: [{ id: "value.csv" }]
22424
+ }
22425
+ },
22147
22426
  scheduleScope: { $bind: { from: "content.scheduleScope" } }
22148
22427
  },
22149
22428
  mode: "server"
@@ -22928,7 +23207,12 @@ var eventCalendarBlockDefinition = {
22928
23207
  // Pass filter params if configured
22929
23208
  kind: { $bind: { from: "content.kind" } },
22930
23209
  eventSurface: { $bind: { from: "content.eventSurface" } },
22931
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
23210
+ eventPresets: {
23211
+ $bind: {
23212
+ from: "content.filterEventPresets",
23213
+ transforms: [{ id: "value.csv" }]
23214
+ }
23215
+ },
22932
23216
  scheduleScope: { $bind: { from: "content.scheduleScope" } },
22933
23217
  categoryIds: { $bind: { from: "content.filterCategoryIds" } },
22934
23218
  staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
@@ -24409,7 +24693,7 @@ var publicProductsResponseSchema = z53.object({
24409
24693
  });
24410
24694
 
24411
24695
  // ../blocks/src/system/runtime/api/creditProducts.ts
24412
- function assertNever4(value) {
24696
+ function assertNever3(value) {
24413
24697
  throw new Error(`Unhandled credit product case: ${String(value)}`);
24414
24698
  }
24415
24699
  function useCasesFromModules(modules) {
@@ -24442,7 +24726,7 @@ function getCreditProductCreditUnit(useCase) {
24442
24726
  perCreditSuffix: "credit"
24443
24727
  };
24444
24728
  default:
24445
- return assertNever4(useCase);
24729
+ return assertNever3(useCase);
24446
24730
  }
24447
24731
  }
24448
24732
  function deriveCreditProductLabels(products, options = {}) {
@@ -30184,6 +30468,11 @@ function CoursePricingDisplay({
30184
30468
 
30185
30469
  // ../blocks/src/system/runtime/nodes/event-details/view.tsx
30186
30470
  import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs13 } from "react/jsx-runtime";
30471
+ function formatAutoApplyDiscountLine(preview, currency) {
30472
+ const rate = preview.discountType === "percent" ? `${preview.discountPercent}% off` : `${formatCoursePriceAmount(preview.discountAmountCents, currency)} off`;
30473
+ const label = preview.publicLabel.trim() || "Discount";
30474
+ return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} \u2014 ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} \u2014 ${rate} applied automatically`;
30475
+ }
30187
30476
  function TeamMemberName({
30188
30477
  name,
30189
30478
  profilePath
@@ -30200,6 +30489,7 @@ function EventDetailsView({
30200
30489
  showAcceptedMemberships = true,
30201
30490
  applicablePasses = [],
30202
30491
  applicableMemberships = [],
30492
+ autoApplyDiscount = null,
30203
30493
  mapHeight = 200,
30204
30494
  mapClassName = "event-details-map",
30205
30495
  renderVenueMap
@@ -30275,6 +30565,7 @@ function EventDetailsView({
30275
30565
  ) : shouldShowEventCost ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
30276
30566
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Cost" }),
30277
30567
  eventPrice !== null ? /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: formatCoursePriceAmount(eventPrice, selected.currency ?? "USD") }) }) : /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: "See checkout for details" }),
30568
+ autoApplyDiscount ? /* @__PURE__ */ jsx26("p", { className: "rb-caption rb-mt-1", children: formatAutoApplyDiscountLine(autoApplyDiscount, selected.currency ?? "USD") }) : null,
30278
30569
  hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
30279
30570
  "You can also attend with: ",
30280
30571
  acceptedItems.join(", ")
@@ -30323,6 +30614,7 @@ function EventDetailsSSR({
30323
30614
  showAcceptedMemberships = true,
30324
30615
  sitePasses,
30325
30616
  siteMemberships,
30617
+ autoApplyDiscount,
30326
30618
  className,
30327
30619
  children
30328
30620
  }) {
@@ -30359,6 +30651,7 @@ function EventDetailsSSR({
30359
30651
  showAcceptedMemberships,
30360
30652
  sitePasses,
30361
30653
  siteMemberships,
30654
+ autoApplyDiscount,
30362
30655
  className,
30363
30656
  nowIso
30364
30657
  }
@@ -30376,6 +30669,7 @@ function EventDetailsSSR({
30376
30669
  showAcceptedMemberships,
30377
30670
  applicablePasses,
30378
30671
  applicableMemberships,
30672
+ autoApplyDiscount: autoApplyDiscount ?? null,
30379
30673
  mapClassName: "venue-map event-details-map",
30380
30674
  renderVenueMap: ({ venueName, className: className2, height }) => /* @__PURE__ */ jsx27("div", { className: "event-details-map-wrap rb-w-full rb-ml-auto", children: /* @__PURE__ */ jsx27(
30381
30675
  "div",
@@ -33380,119 +33674,6 @@ function renderBlock(manifest, content, options = {}) {
33380
33674
  );
33381
33675
  }
33382
33676
 
33383
- // ../theme-core/src/palette/generateShades.ts
33384
- function generateShades(hexColor, name) {
33385
- const shadeSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
33386
- const base = featuresFromHex(hexColor);
33387
- const hue = base.okH;
33388
- const baseChroma = base.okC;
33389
- const toneMap = {
33390
- 50: 0.975,
33391
- 100: 0.945,
33392
- 200: 0.89,
33393
- 300: 0.82,
33394
- 400: 0.74,
33395
- 500: 0.66,
33396
- 600: 0.58,
33397
- 700: 0.49,
33398
- 800: 0.4,
33399
- 900: 0.28,
33400
- 950: 0.16
33401
- };
33402
- const shadeDefs = shadeSteps.map((step, idx) => {
33403
- const t = idx / (shadeSteps.length - 1);
33404
- const L = toneMap[step];
33405
- const chromaFactor = 0.06 + 0.94 * Math.sin(Math.PI * t);
33406
- const C = baseChroma * chromaFactor;
33407
- return {
33408
- name: `${name}-${step}`,
33409
- hex: oklchToHexGamut(L, C, hue)
33410
- };
33411
- });
33412
- shadeDefs.push({ name, hex: hexColor });
33413
- return shadeDefs;
33414
- }
33415
-
33416
- // ../theme-core/src/palette/neutralScale.ts
33417
- function generateNeutralScale({
33418
- background,
33419
- steps = 11,
33420
- warm = false
33421
- }) {
33422
- const isDark = background === "#000000" || background.startsWith("#0") || background.startsWith("#1");
33423
- const shadeNames = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
33424
- const count = Math.min(steps, shadeNames.length);
33425
- const scale = [];
33426
- for (let i = 0; i < count; i++) {
33427
- const t = i / (count - 1);
33428
- const tone = isDark ? mix(0.06, 0.92, t) : mix(0.98, 0.1, t);
33429
- const hex = oklchToHexGamut(tone, 0.02, warm ? 85 : 250);
33430
- const name = `neutral-${shadeNames[i]}`;
33431
- scale.push({ name, hex });
33432
- }
33433
- return scale;
33434
- }
33435
- function mix(a, b, t) {
33436
- return a + (b - a) * Math.max(0, Math.min(1, t));
33437
- }
33438
-
33439
- // ../theme-core/src/palette/expandPalette.ts
33440
- function colorsToMap(palette) {
33441
- const map = {};
33442
- for (const c of palette.colors) {
33443
- map[c.name] = c.hex;
33444
- }
33445
- return map;
33446
- }
33447
- function isBackgroundDark(hex) {
33448
- try {
33449
- return featuresFromHex(hex).Y < 0.5;
33450
- } catch {
33451
- return false;
33452
- }
33453
- }
33454
- function expandPalette(palette) {
33455
- const base = colorsToMap(palette);
33456
- const expanded = { ...base };
33457
- const background = base.background || base.surface || "#ffffff";
33458
- const neutral2 = generateNeutralScale({ background, steps: 11, warm: false });
33459
- neutral2.forEach((n) => {
33460
- expanded[n.name] = n.hex;
33461
- });
33462
- for (const [name, hex] of Object.entries(base)) {
33463
- if (hex) {
33464
- const shades = generateShades(hex, name);
33465
- shades.forEach((shade) => {
33466
- expanded[shade.name] = shade.hex;
33467
- });
33468
- }
33469
- }
33470
- if (base.text) expanded.body = base.text;
33471
- if (base.danger && !base.destructive) {
33472
- expanded.destructive = base.danger;
33473
- }
33474
- const isDark = base.background ? isBackgroundDark(base.background) : false;
33475
- const isDarkMode = palette.meta?.mode === "dark" || isDark;
33476
- expanded.mutedText = isDarkMode ? expanded["neutral-600"] ?? "#666" : expanded["neutral-500"] ?? "#888";
33477
- const onRoles = [
33478
- { role: "primary", on: "onPrimary" },
33479
- { role: "secondary", on: "onSecondary" },
33480
- { role: "accent", on: "onAccent" },
33481
- { role: "success", on: "onSuccess" },
33482
- { role: "warning", on: "onWarning" },
33483
- { role: "destructive", on: "onDestructive" },
33484
- { role: "info", on: "onInfo" },
33485
- { role: "surface", on: "onSurface" }
33486
- ];
33487
- for (const { role, on } of onRoles) {
33488
- const bg = base[role];
33489
- if (!bg) continue;
33490
- if (expanded[on]) continue;
33491
- expanded[on] = getTextColorForBackground(bg);
33492
- }
33493
- return expanded;
33494
- }
33495
-
33496
33677
  // ../theme-core/src/runtime/fontFamily.ts
33497
33678
  var GENERIC_CSS_FAMILIES = [
33498
33679
  "serif",
@@ -48640,6 +48821,17 @@ var SUPPORTED_LOADER_ENDPOINTS = [
48640
48821
  // ../blocks/src/primitives/content/primitives.tsx
48641
48822
  var RichText2 = RichText;
48642
48823
 
48824
+ // ../api/src/apiEndpointTypes.ts
48825
+ function blockedDemoMutationPolicy(classification, publicMessage) {
48826
+ if (publicMessage.trim() === "") {
48827
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
48828
+ }
48829
+ return {
48830
+ classification,
48831
+ publicMessage
48832
+ };
48833
+ }
48834
+
48643
48835
  // ../api/src/cache-tags.ts
48644
48836
  var TAG_TEMPLATES = {
48645
48837
  siteCollection: "riverbank:site",
@@ -48670,6 +48862,18 @@ var TAG_TEMPLATES = {
48670
48862
  };
48671
48863
 
48672
48864
  // ../api/src/endpoints.ts
48865
+ var DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
48866
+ "blocked-hidden",
48867
+ "This action is not available in demo sites."
48868
+ );
48869
+ var DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
48870
+ "blocked-disabled",
48871
+ "This setting is disabled in demo sites."
48872
+ );
48873
+ var DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
48874
+ "internal-only",
48875
+ "This internal operation is not available in demo sites."
48876
+ );
48673
48877
  var ENDPOINT_DEFINITIONS = {
48674
48878
  // AI endpoints - no cache due to dynamic nature
48675
48879
  aiContentUpdateChat: {
@@ -48786,7 +48990,8 @@ var ENDPOINT_DEFINITIONS = {
48786
48990
  path: "/sites/{siteId}/ai/generate",
48787
48991
  method: "POST",
48788
48992
  auth: "user",
48789
- responseKind: "json"
48993
+ responseKind: "json",
48994
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
48790
48995
  },
48791
48996
  getOnboardingPreviewStatus: {
48792
48997
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -48807,7 +49012,8 @@ var ENDPOINT_DEFINITIONS = {
48807
49012
  method: "POST",
48808
49013
  auth: "user",
48809
49014
  errors: [],
48810
- responseKind: "json"
49015
+ responseKind: "json",
49016
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
48811
49017
  },
48812
49018
  goLiveSite: {
48813
49019
  path: "/sites/{siteId}/launch/go-live",
@@ -48876,20 +49082,23 @@ var ENDPOINT_DEFINITIONS = {
48876
49082
  path: "/sites/{siteId}/ai/site-wizard/goals",
48877
49083
  method: "POST",
48878
49084
  auth: "user",
48879
- responseKind: "json"
49085
+ responseKind: "json",
49086
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
48880
49087
  },
48881
49088
  aiSiteWizardIntakeTriage: {
48882
49089
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
48883
49090
  method: "POST",
48884
49091
  auth: "user",
48885
- responseKind: "json"
49092
+ responseKind: "json",
49093
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
48886
49094
  },
48887
49095
  aiSiteWizardTelemetry: {
48888
49096
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
48889
49097
  method: "POST",
48890
49098
  auth: "user",
48891
49099
  errors: [],
48892
- responseKind: "json"
49100
+ responseKind: "json",
49101
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
48893
49102
  },
48894
49103
  // Admin SEO
48895
49104
  listGscPropertiesAdmin: {
@@ -49096,7 +49305,7 @@ var ENDPOINT_DEFINITIONS = {
49096
49305
  responseKind: "json",
49097
49306
  errors: ["resource:not_found", "server:internal_error"]
49098
49307
  },
49099
- // Ops (event hosts/admins)
49308
+ // Ops (staff event operators/admins)
49100
49309
  opsListUpcomingEventOccurrences: {
49101
49310
  path: "/ops/sites/{siteId}/events",
49102
49311
  method: "GET",
@@ -49114,6 +49323,7 @@ var ENDPOINT_DEFINITIONS = {
49114
49323
  method: "POST",
49115
49324
  auth: "user",
49116
49325
  responseKind: "json",
49326
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49117
49327
  errors: [
49118
49328
  "validation:invalid_input",
49119
49329
  "auth:forbidden",
@@ -49126,6 +49336,7 @@ var ENDPOINT_DEFINITIONS = {
49126
49336
  method: "POST",
49127
49337
  auth: "user",
49128
49338
  responseKind: "json",
49339
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49129
49340
  errors: [
49130
49341
  "validation:invalid_input",
49131
49342
  "auth:forbidden",
@@ -49144,6 +49355,7 @@ var ENDPOINT_DEFINITIONS = {
49144
49355
  method: "POST",
49145
49356
  auth: "user",
49146
49357
  responseKind: "json",
49358
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49147
49359
  errors: [
49148
49360
  "validation:invalid_input",
49149
49361
  "auth:forbidden",
@@ -49177,6 +49389,7 @@ var ENDPOINT_DEFINITIONS = {
49177
49389
  method: "POST",
49178
49390
  auth: "user",
49179
49391
  responseKind: "json",
49392
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49180
49393
  errors: [
49181
49394
  "validation:invalid_input",
49182
49395
  "auth:forbidden",
@@ -49205,7 +49418,8 @@ var ENDPOINT_DEFINITIONS = {
49205
49418
  method: "POST",
49206
49419
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
49207
49420
  auth: "user",
49208
- responseKind: "json"
49421
+ responseKind: "json",
49422
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49209
49423
  },
49210
49424
  previewEmailTemplate: {
49211
49425
  path: "/sites/{siteId}/settings/emails/preview",
@@ -49256,14 +49470,16 @@ var ENDPOINT_DEFINITIONS = {
49256
49470
  method: "POST",
49257
49471
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49258
49472
  auth: "user",
49259
- responseKind: "json"
49473
+ responseKind: "json",
49474
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49260
49475
  },
49261
49476
  createNewsletterSubscribersImportUploadUrl: {
49262
49477
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
49263
49478
  method: "POST",
49264
49479
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49265
49480
  auth: "user",
49266
- responseKind: "json"
49481
+ responseKind: "json",
49482
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49267
49483
  },
49268
49484
  exportNewsletterSubscribersCsv: {
49269
49485
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -49460,14 +49676,16 @@ var ENDPOINT_DEFINITIONS = {
49460
49676
  method: "POST",
49461
49677
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49462
49678
  auth: "user",
49463
- responseKind: "json"
49679
+ responseKind: "json",
49680
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49464
49681
  },
49465
49682
  testSendNewsletterCampaign: {
49466
49683
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
49467
49684
  method: "POST",
49468
49685
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49469
49686
  auth: "user",
49470
- responseKind: "json"
49687
+ responseKind: "json",
49688
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49471
49689
  },
49472
49690
  listNewsletterSendJobs: {
49473
49691
  path: "/sites/{siteId}/newsletter/jobs",
@@ -50155,7 +50373,8 @@ var ENDPOINT_DEFINITIONS = {
50155
50373
  method: "DELETE",
50156
50374
  tags: ["site", "site-{siteId}"],
50157
50375
  auth: "user",
50158
- responseKind: "json"
50376
+ responseKind: "json",
50377
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
50159
50378
  },
50160
50379
  listSiteMembers: {
50161
50380
  path: "/sites/{siteId}/members",
@@ -50611,7 +50830,8 @@ var ENDPOINT_DEFINITIONS = {
50611
50830
  method: "POST",
50612
50831
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
50613
50832
  auth: "user",
50614
- responseKind: "json"
50833
+ responseKind: "json",
50834
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
50615
50835
  },
50616
50836
  updateSiteGeneralSettings: {
50617
50837
  path: "/sites/{siteId}/settings/general",
@@ -51419,6 +51639,14 @@ var ENDPOINT_DEFINITIONS = {
51419
51639
  auth: "user",
51420
51640
  responseKind: "json"
51421
51641
  },
51642
+ saveSiteChromeLookSelection: {
51643
+ path: "/sites/{siteId}/theme/site-chrome-look",
51644
+ method: "POST",
51645
+ tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme],
51646
+ auth: "user",
51647
+ errors: [],
51648
+ responseKind: "json"
51649
+ },
51422
51650
  uploadSiteLogo: {
51423
51651
  path: "/storage/upload-site-logo",
51424
51652
  method: "POST",
@@ -52842,6 +53070,7 @@ var ENDPOINT_DEFINITIONS = {
52842
53070
  method: "POST",
52843
53071
  tags: ["site-{siteId}"],
52844
53072
  auth: "user",
53073
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
52845
53074
  errors: [
52846
53075
  "validation:invalid_input",
52847
53076
  "auth:forbidden",
@@ -52856,6 +53085,7 @@ var ENDPOINT_DEFINITIONS = {
52856
53085
  method: "POST",
52857
53086
  tags: ["site-{siteId}"],
52858
53087
  auth: "user",
53088
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
52859
53089
  errors: [
52860
53090
  "validation:invalid_input",
52861
53091
  "auth:forbidden",
@@ -53165,6 +53395,7 @@ var ENDPOINT_DEFINITIONS = {
53165
53395
  tags: ["site-{siteId}", "passes-{siteId}"],
53166
53396
  auth: "user",
53167
53397
  responseKind: "json",
53398
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53168
53399
  errors: ["validation:invalid_input", "server:internal_error"]
53169
53400
  },
53170
53401
  getBookingPass: {
@@ -53180,6 +53411,7 @@ var ENDPOINT_DEFINITIONS = {
53180
53411
  tags: ["site-{siteId}", "passes-{siteId}"],
53181
53412
  auth: "user",
53182
53413
  responseKind: "json",
53414
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53183
53415
  errors: [
53184
53416
  "validation:invalid_input",
53185
53417
  "resource:not_found",
@@ -53192,6 +53424,7 @@ var ENDPOINT_DEFINITIONS = {
53192
53424
  tags: ["site-{siteId}", "passes-{siteId}"],
53193
53425
  auth: "user",
53194
53426
  responseKind: "json",
53427
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53195
53428
  errors: [
53196
53429
  "validation:invalid_input",
53197
53430
  "resource:not_found",
@@ -53247,6 +53480,7 @@ var ENDPOINT_DEFINITIONS = {
53247
53480
  tags: ["site-{siteId}", "memberships-{siteId}"],
53248
53481
  auth: "user",
53249
53482
  responseKind: "json",
53483
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53250
53484
  errors: ["validation:invalid_input", "server:internal_error"]
53251
53485
  },
53252
53486
  getBookingMembership: {
@@ -53262,6 +53496,7 @@ var ENDPOINT_DEFINITIONS = {
53262
53496
  tags: ["site-{siteId}", "memberships-{siteId}"],
53263
53497
  auth: "user",
53264
53498
  responseKind: "json",
53499
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53265
53500
  errors: [
53266
53501
  "validation:invalid_input",
53267
53502
  "resource:not_found",
@@ -53274,6 +53509,7 @@ var ENDPOINT_DEFINITIONS = {
53274
53509
  tags: ["site-{siteId}", "memberships-{siteId}"],
53275
53510
  auth: "user",
53276
53511
  responseKind: "json",
53512
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53277
53513
  errors: [
53278
53514
  "validation:invalid_input",
53279
53515
  "resource:not_found",
@@ -53490,6 +53726,7 @@ var ENDPOINT_DEFINITIONS = {
53490
53726
  tags: ["site-{siteId}", "customers-{siteId}"],
53491
53727
  auth: "user",
53492
53728
  responseKind: "json",
53729
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53493
53730
  errors: [
53494
53731
  "validation:invalid_input",
53495
53732
  "auth:forbidden",
@@ -53863,6 +54100,14 @@ var ENDPOINT_DEFINITIONS = {
53863
54100
  auth: "admin",
53864
54101
  responseKind: "json"
53865
54102
  },
54103
+ adminScheduleBillingComponentEnd: {
54104
+ path: "/admin/sites/{siteId}/billing/components/{componentId}/end",
54105
+ method: "POST",
54106
+ tags: ["admin", "site-{siteId}", "billing"],
54107
+ auth: "admin",
54108
+ responseKind: "json",
54109
+ errors: []
54110
+ },
53866
54111
  // Admin GSC/SEO endpoints
53867
54112
  adminGscVerifyStart: {
53868
54113
  path: "/admin/seo/gsc/properties/verify/start",
@@ -54587,6 +54832,13 @@ var ENDPOINT_DEFINITIONS = {
54587
54832
  auth: "public",
54588
54833
  responseKind: "json"
54589
54834
  },
54835
+ demoClaimMagicLink: {
54836
+ path: "/demo/auth/send-magic-link",
54837
+ method: "POST",
54838
+ auth: "public",
54839
+ responseKind: "json",
54840
+ errors: []
54841
+ },
54590
54842
  previewExchangeCode: {
54591
54843
  path: "/preview/auth/exchange",
54592
54844
  method: "POST",
@@ -54745,61 +54997,74 @@ var ENDPOINT_DEFINITIONS = {
54745
54997
  }
54746
54998
  };
54747
54999
 
54748
- // ../api/src/navigation/contracts.ts
55000
+ // ../api/src/accessAdmin.ts
54749
55001
  import { z as z64 } from "zod";
54750
- var portalLinkPayloadSchema = z64.object({
54751
- kind: z64.literal("portal"),
54752
- path: z64.string().trim().startsWith("/").optional(),
54753
- labels: z64.object({
54754
- loggedOut: z64.string().trim().min(1).optional(),
54755
- loggedIn: z64.string().trim().min(1).optional()
55002
+ var managedDomainAddOnPricingSnapshotSchema = z64.object({
55003
+ formulaVersion: z64.literal("managed-domain-overage-v1"),
55004
+ conversionRule: z64.literal("usd-to-gbp-1-to-1-v1"),
55005
+ registrarAnnualCost: z64.number().nonnegative(),
55006
+ registrarCurrency: z64.literal("USD"),
55007
+ includedAnnualAllowance: z64.number().nonnegative(),
55008
+ includedAnnualAllowanceCurrency: z64.literal("USD"),
55009
+ monthlyAmountCents: z64.number().int().nonnegative(),
55010
+ monthlyCurrency: z64.literal("gbp")
55011
+ });
55012
+
55013
+ // ../api/src/navigation/contracts.ts
55014
+ import { z as z65 } from "zod";
55015
+ var portalLinkPayloadSchema = z65.object({
55016
+ kind: z65.literal("portal"),
55017
+ path: z65.string().trim().startsWith("/").optional(),
55018
+ labels: z65.object({
55019
+ loggedOut: z65.string().trim().min(1).optional(),
55020
+ loggedIn: z65.string().trim().min(1).optional()
54756
55021
  }).optional()
54757
55022
  });
54758
- var cartLinkLabelConfigSchema = z64.discriminatedUnion("kind", [
54759
- z64.object({
54760
- kind: z64.literal("icon-only")
55023
+ var cartLinkLabelConfigSchema = z65.discriminatedUnion("kind", [
55024
+ z65.object({
55025
+ kind: z65.literal("icon-only")
54761
55026
  }),
54762
- z64.object({
54763
- kind: z64.literal("icon-with-label"),
54764
- label: z64.string().trim().min(1)
55027
+ z65.object({
55028
+ kind: z65.literal("icon-with-label"),
55029
+ label: z65.string().trim().min(1)
54765
55030
  })
54766
55031
  ]);
54767
- var cartLinkPayloadSchema = z64.object({
54768
- kind: z64.literal("cart"),
54769
- badge: z64.enum(["show-count", "hidden"]),
55032
+ var cartLinkPayloadSchema = z65.object({
55033
+ kind: z65.literal("cart"),
55034
+ badge: z65.enum(["show-count", "hidden"]),
54770
55035
  label: cartLinkLabelConfigSchema
54771
55036
  });
54772
- var internalLinkPayloadSchema = z64.object({
54773
- kind: z64.literal("internal"),
54774
- routeId: z64.string().uuid(),
54775
- entityId: z64.string().uuid(),
54776
- entityType: z64.enum(["page", "content"]),
54777
- href: z64.string().min(1),
54778
- title: z64.string().min(1),
54779
- typeLabel: z64.string().min(1),
54780
- contentTypeKey: z64.string().nullable().optional(),
54781
- contentTypeName: z64.string().nullable().optional(),
54782
- updatedAt: z64.string().nullable().optional()
55037
+ var internalLinkPayloadSchema = z65.object({
55038
+ kind: z65.literal("internal"),
55039
+ routeId: z65.string().uuid(),
55040
+ entityId: z65.string().uuid(),
55041
+ entityType: z65.enum(["page", "content"]),
55042
+ href: z65.string().min(1),
55043
+ title: z65.string().min(1),
55044
+ typeLabel: z65.string().min(1),
55045
+ contentTypeKey: z65.string().nullable().optional(),
55046
+ contentTypeName: z65.string().nullable().optional(),
55047
+ updatedAt: z65.string().nullable().optional()
54783
55048
  }).passthrough();
54784
- var externalLinkSchema2 = z64.object({
54785
- kind: z64.literal("external"),
55049
+ var externalLinkSchema2 = z65.object({
55050
+ kind: z65.literal("external"),
54786
55051
  // Navigation external links are expected to be absolute URLs.
54787
- href: z64.string().url()
55052
+ href: z65.string().url()
54788
55053
  });
54789
- var customLinkSchema2 = z64.object({
54790
- kind: z64.literal("url"),
54791
- href: z64.string().min(1)
55054
+ var customLinkSchema2 = z65.object({
55055
+ kind: z65.literal("url"),
55056
+ href: z65.string().min(1)
54792
55057
  });
54793
- var pageLinkSchema2 = z64.object({
54794
- kind: z64.literal("page"),
54795
- identifier: z64.string().min(1)
55058
+ var pageLinkSchema2 = z65.object({
55059
+ kind: z65.literal("page"),
55060
+ identifier: z65.string().min(1)
54796
55061
  });
54797
- var entryLinkSchema2 = z64.object({
54798
- kind: z64.literal("entry"),
54799
- contentType: z64.string().min(1),
54800
- identifier: z64.string().min(1)
55062
+ var entryLinkSchema2 = z65.object({
55063
+ kind: z65.literal("entry"),
55064
+ contentType: z65.string().min(1),
55065
+ identifier: z65.string().min(1)
54801
55066
  });
54802
- var linkPayloadSchema = z64.discriminatedUnion("kind", [
55067
+ var linkPayloadSchema = z65.discriminatedUnion("kind", [
54803
55068
  internalLinkPayloadSchema,
54804
55069
  pageLinkSchema2,
54805
55070
  entryLinkSchema2,
@@ -54816,86 +55081,85 @@ var navigationLinkInputSchemaOptions = [
54816
55081
  portalLinkPayloadSchema,
54817
55082
  cartLinkPayloadSchema
54818
55083
  ];
54819
- var navigationLinkInputSchema = z64.discriminatedUnion(
55084
+ var navigationLinkInputSchema = z65.discriminatedUnion(
54820
55085
  "kind",
54821
55086
  navigationLinkInputSchemaOptions
54822
55087
  );
54823
55088
 
54824
55089
  // ../api/src/sdkConfig/contracts.ts
54825
- import { z as z65 } from "zod";
55090
+ import { z as z66 } from "zod";
54826
55091
  function unsafeRetypeZodSchema(schema) {
54827
55092
  return schema;
54828
55093
  }
54829
- var navIdListSchema = z65.preprocess((value) => {
55094
+ var navIdListSchema = z66.preprocess((value) => {
54830
55095
  if (!Array.isArray(value)) return void 0;
54831
55096
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
54832
55097
  return filtered.length > 0 ? filtered : void 0;
54833
- }, z65.array(z65.string()).max(200).optional());
54834
- var dashboardNavVisibilityBaseSchema = z65.object({
54835
- mode: z65.enum(["augment", "restrict"]).optional(),
55098
+ }, z66.array(z66.string()).max(200).optional());
55099
+ var dashboardNavVisibilityBaseSchema = z66.object({
55100
+ mode: z66.enum(["augment", "restrict"]).optional(),
54836
55101
  allowIds: navIdListSchema,
54837
55102
  denyIds: navIdListSchema
54838
55103
  }).strip();
54839
- var dashboardNavVisibilityRolesSchema = z65.object({
55104
+ var dashboardNavVisibilityRolesSchema = z66.object({
54840
55105
  administrator: dashboardNavVisibilityBaseSchema.optional(),
54841
55106
  editor: dashboardNavVisibilityBaseSchema.optional(),
54842
- team_member: dashboardNavVisibilityBaseSchema.optional(),
54843
- event_host: dashboardNavVisibilityBaseSchema.optional()
55107
+ team_member: dashboardNavVisibilityBaseSchema.optional()
54844
55108
  }).strip().optional();
54845
55109
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
54846
55110
  roles: dashboardNavVisibilityRolesSchema
54847
55111
  }).strip();
54848
- var dashboardNavigationConfigSchema = z65.object({
55112
+ var dashboardNavigationConfigSchema = z66.object({
54849
55113
  siteNav: dashboardNavVisibilitySchema.optional(),
54850
55114
  settingsNav: dashboardNavVisibilitySchema.optional()
54851
55115
  }).strip();
54852
- var dashboardConfigSchema = z65.object({
54853
- previewEditingEnabled: z65.boolean().optional(),
55116
+ var dashboardConfigSchema = z66.object({
55117
+ previewEditingEnabled: z66.boolean().optional(),
54854
55118
  navigation: dashboardNavigationConfigSchema.optional()
54855
55119
  }).strip();
54856
55120
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
54857
55121
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
54858
- var sdkLoaderEndpointSchema = z65.enum(SUPPORTED_LOADER_ENDPOINTS);
54859
- var loaderParamBindingSchema = z65.object({
54860
- $bind: z65.object({
54861
- from: z65.string().min(1, "Binding path is required"),
54862
- fallback: z65.string().optional()
55122
+ var sdkLoaderEndpointSchema = z66.enum(SUPPORTED_LOADER_ENDPOINTS);
55123
+ var loaderParamBindingSchema = z66.object({
55124
+ $bind: z66.object({
55125
+ from: z66.string().min(1, "Binding path is required"),
55126
+ fallback: z66.string().optional()
54863
55127
  })
54864
55128
  });
54865
- var loaderParamValueSchema = z65.union([
54866
- z65.string(),
54867
- z65.number(),
54868
- z65.boolean(),
55129
+ var loaderParamValueSchema = z66.union([
55130
+ z66.string(),
55131
+ z66.number(),
55132
+ z66.boolean(),
54869
55133
  loaderParamBindingSchema
54870
55134
  ]);
54871
- var sdkConfigLoaderSchema = z65.object({
55135
+ var sdkConfigLoaderSchema = z66.object({
54872
55136
  endpoint: sdkLoaderEndpointSchema,
54873
- params: z65.record(z65.string(), loaderParamValueSchema),
54874
- mode: z65.enum(["server", "client"]).default("server")
55137
+ params: z66.record(z66.string(), loaderParamValueSchema),
55138
+ mode: z66.enum(["server", "client"]).default("server")
54875
55139
  });
54876
- var sdkDataLoadersSchema = z65.record(z65.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
54877
- var sdkCustomBlockIdSchema = z65.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
55140
+ var sdkDataLoadersSchema = z66.record(z66.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
55141
+ var sdkCustomBlockIdSchema = z66.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
54878
55142
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
54879
55143
  }).transform((value) => value);
54880
- var sdkCustomBlockInputSchema = z65.object({
55144
+ var sdkCustomBlockInputSchema = z66.object({
54881
55145
  id: sdkCustomBlockIdSchema,
54882
- title: z65.string().min(1),
54883
- titleSource: z65.union([z65.string().min(1), z65.array(z65.string().min(1)).min(1)]).optional(),
54884
- description: z65.string().optional(),
55146
+ title: z66.string().min(1),
55147
+ titleSource: z66.union([z66.string().min(1), z66.array(z66.string().min(1)).min(1)]).optional(),
55148
+ description: z66.string().optional(),
54885
55149
  category: blockCategoryEnum,
54886
- icon: z65.string().optional(),
54887
- tags: z65.array(z65.string()).optional(),
55150
+ icon: z66.string().optional(),
55151
+ tags: z66.array(z66.string()).optional(),
54888
55152
  fields: fieldDefinitionInputSchema.array().min(1),
54889
55153
  dataLoaders: sdkDataLoadersSchema,
54890
55154
  layout: NodeSchema.optional(),
54891
- variants: z65.record(z65.string().min(1), NodeSchema).optional(),
54892
- defaultVariant: z65.string().min(1).optional(),
54893
- variantOptions: z65.record(
54894
- z65.string().min(1),
54895
- z65.object({
54896
- label: z65.string().min(1).optional(),
54897
- description: z65.string().min(1).optional(),
54898
- icon: z65.string().min(1).optional()
55155
+ variants: z66.record(z66.string().min(1), NodeSchema).optional(),
55156
+ defaultVariant: z66.string().min(1).optional(),
55157
+ variantOptions: z66.record(
55158
+ z66.string().min(1),
55159
+ z66.object({
55160
+ label: z66.string().min(1).optional(),
55161
+ description: z66.string().min(1).optional(),
55162
+ icon: z66.string().min(1).optional()
54899
55163
  })
54900
55164
  ).optional()
54901
55165
  }).superRefine((data, ctx) => {
@@ -54905,7 +55169,7 @@ var sdkCustomBlockInputSchema = z65.object({
54905
55169
  const exists = data.fields.some((field) => field.id === source);
54906
55170
  if (!exists) {
54907
55171
  ctx.addIssue({
54908
- code: z65.ZodIssueCode.custom,
55172
+ code: z66.ZodIssueCode.custom,
54909
55173
  message: `titleSource must reference a valid field ID (got "${source}")`,
54910
55174
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
54911
55175
  });
@@ -54914,7 +55178,7 @@ var sdkCustomBlockInputSchema = z65.object({
54914
55178
  }
54915
55179
  if (data.layout && data.variants) {
54916
55180
  ctx.addIssue({
54917
- code: z65.ZodIssueCode.custom,
55181
+ code: z66.ZodIssueCode.custom,
54918
55182
  message: "Custom block must define either `layout` or `variants`, not both",
54919
55183
  path: ["variants"]
54920
55184
  });
@@ -54923,14 +55187,14 @@ var sdkCustomBlockInputSchema = z65.object({
54923
55187
  const keys = Object.keys(data.variants);
54924
55188
  if (keys.length === 0) {
54925
55189
  ctx.addIssue({
54926
- code: z65.ZodIssueCode.custom,
55190
+ code: z66.ZodIssueCode.custom,
54927
55191
  message: "`variants` must contain at least one variant key",
54928
55192
  path: ["variants"]
54929
55193
  });
54930
55194
  }
54931
55195
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
54932
55196
  ctx.addIssue({
54933
- code: z65.ZodIssueCode.custom,
55197
+ code: z66.ZodIssueCode.custom,
54934
55198
  message: "`defaultVariant` must be a key present in `variants`",
54935
55199
  path: ["defaultVariant"]
54936
55200
  });
@@ -54939,7 +55203,7 @@ var sdkCustomBlockInputSchema = z65.object({
54939
55203
  for (const key of Object.keys(data.variantOptions)) {
54940
55204
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
54941
55205
  ctx.addIssue({
54942
- code: z65.ZodIssueCode.custom,
55206
+ code: z66.ZodIssueCode.custom,
54943
55207
  message: "`variantOptions` key must exist in `variants`",
54944
55208
  path: ["variantOptions", key]
54945
55209
  });
@@ -54948,74 +55212,74 @@ var sdkCustomBlockInputSchema = z65.object({
54948
55212
  }
54949
55213
  }
54950
55214
  });
54951
- var sdkBlockFieldExtensionInputSchema = z65.object({
55215
+ var sdkBlockFieldExtensionInputSchema = z66.object({
54952
55216
  fields: fieldDefinitionInputSchema.array().min(1)
54953
55217
  });
54954
- var sdkBlockFieldExtensionsInputSchema = z65.record(
54955
- z65.string().min(1),
55218
+ var sdkBlockFieldExtensionsInputSchema = z66.record(
55219
+ z66.string().min(1),
54956
55220
  sdkBlockFieldExtensionInputSchema
54957
55221
  );
54958
- var sdkThemePaletteSchema = z65.record(z65.string(), z65.string());
54959
- var sdkThemeConfigSchema = z65.object({
55222
+ var sdkThemePaletteSchema = z66.record(z66.string(), z66.string());
55223
+ var sdkThemeConfigSchema = z66.object({
54960
55224
  palette: sdkThemePaletteSchema
54961
55225
  });
54962
- var sdkSectionBackgroundSchema = z65.object({
54963
- id: z65.string().min(1),
54964
- label: z65.string().min(1),
54965
- token: z65.string().min(1)
55226
+ var sdkSectionBackgroundSchema = z66.object({
55227
+ id: z66.string().min(1),
55228
+ label: z66.string().min(1),
55229
+ token: z66.string().min(1)
54966
55230
  });
54967
- var sdkSectionOptionsConfigSchema = z65.object({
54968
- backgroundColor: z65.boolean().optional(),
54969
- backgroundImage: z65.boolean().optional(),
54970
- backgroundGradient: z65.boolean().optional(),
54971
- spacing: z65.union([z65.array(z65.enum(["compact", "default", "spacious"])), z65.boolean()]).optional(),
54972
- textColor: z65.boolean().optional()
55231
+ var sdkSectionOptionsConfigSchema = z66.object({
55232
+ backgroundColor: z66.boolean().optional(),
55233
+ backgroundImage: z66.boolean().optional(),
55234
+ backgroundGradient: z66.boolean().optional(),
55235
+ spacing: z66.union([z66.array(z66.enum(["compact", "default", "spacious"])), z66.boolean()]).optional(),
55236
+ textColor: z66.boolean().optional()
54973
55237
  });
54974
- var sdkContainerOptionsConfigSchema = z65.object({
54975
- maxWidth: z65.union([z65.array(z65.enum(["narrow", "default", "wide", "full"])), z65.boolean()]).optional(),
54976
- alignment: z65.union([z65.array(z65.enum(["left", "center", "right"])), z65.boolean()]).optional()
55238
+ var sdkContainerOptionsConfigSchema = z66.object({
55239
+ maxWidth: z66.union([z66.array(z66.enum(["narrow", "default", "wide", "full"])), z66.boolean()]).optional(),
55240
+ alignment: z66.union([z66.array(z66.enum(["left", "center", "right"])), z66.boolean()]).optional()
54977
55241
  });
54978
- var sdkSiteStyleConfigSchema = z65.object({
54979
- sectionBackgrounds: z65.array(sdkSectionBackgroundSchema).optional(),
55242
+ var sdkSiteStyleConfigSchema = z66.object({
55243
+ sectionBackgrounds: z66.array(sdkSectionBackgroundSchema).optional(),
54980
55244
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
54981
55245
  containerOptions: sdkContainerOptionsConfigSchema.optional()
54982
55246
  });
54983
- var sdkSiteLayoutConfigSchema = z65.object({
54984
- footerBlocks: z65.array(
54985
- z65.object({
54986
- id: z65.string().min(1).optional(),
54987
- kind: z65.string().min(1),
54988
- content: z65.record(z65.string(), z65.unknown()).optional()
55247
+ var sdkSiteLayoutConfigSchema = z66.object({
55248
+ footerBlocks: z66.array(
55249
+ z66.object({
55250
+ id: z66.string().min(1).optional(),
55251
+ kind: z66.string().min(1),
55252
+ content: z66.record(z66.string(), z66.unknown()).optional()
54989
55253
  })
54990
55254
  ).optional()
54991
55255
  });
54992
- var sdkFieldSelectOptionSchema = z65.object({
54993
- value: z65.string(),
54994
- label: z65.string()
55256
+ var sdkFieldSelectOptionSchema = z66.object({
55257
+ value: z66.string(),
55258
+ label: z66.string()
54995
55259
  });
54996
- var sdkBlockFieldConfigSchema = z65.object({
54997
- options: z65.array(sdkFieldSelectOptionSchema).optional()
55260
+ var sdkBlockFieldConfigSchema = z66.object({
55261
+ options: z66.array(sdkFieldSelectOptionSchema).optional()
54998
55262
  });
54999
- var sdkBlockFieldOptionsMapSchema = z65.record(
55000
- z65.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
55263
+ var sdkBlockFieldOptionsMapSchema = z66.record(
55264
+ z66.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
55001
55265
  message: "Block ID must be 'block.*' or 'custom.*' format"
55002
55266
  }),
55003
- z65.record(z65.string().min(1), sdkBlockFieldConfigSchema)
55267
+ z66.record(z66.string().min(1), sdkBlockFieldConfigSchema)
55004
55268
  ).optional();
55005
- var sdkContentTypeTemplateConfigSchema = z65.object({
55006
- blocks: z65.array(z65.unknown())
55269
+ var sdkContentTypeTemplateConfigSchema = z66.object({
55270
+ blocks: z66.array(z66.unknown())
55007
55271
  }).passthrough();
55008
- var sdkContentTypeConfigSchema = z65.object({
55009
- key: z65.string().min(1),
55010
- fields: z65.array(z65.unknown()),
55272
+ var sdkContentTypeConfigSchema = z66.object({
55273
+ key: z66.string().min(1),
55274
+ fields: z66.array(z66.unknown()),
55011
55275
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
55012
55276
  }).passthrough();
55013
- var sdkContentConfigSchema = z65.object({
55014
- contentTypes: z65.array(sdkContentTypeConfigSchema).optional(),
55015
- pages: z65.array(z65.unknown()).optional(),
55016
- entries: z65.array(z65.unknown()).optional(),
55017
- navigationMenus: z65.array(z65.unknown()).optional(),
55018
- settings: z65.unknown().optional()
55277
+ var sdkContentConfigSchema = z66.object({
55278
+ contentTypes: z66.array(sdkContentTypeConfigSchema).optional(),
55279
+ pages: z66.array(z66.unknown()).optional(),
55280
+ entries: z66.array(z66.unknown()).optional(),
55281
+ navigationMenus: z66.array(z66.unknown()).optional(),
55282
+ settings: z66.unknown().optional()
55019
55283
  }).passthrough();
55020
55284
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
55021
55285
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -55023,46 +55287,69 @@ var SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH = 500;
55023
55287
  var SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH = 120;
55024
55288
  var SDK_WORKFLOW_ENDPOINT_MAX_LENGTH = 500;
55025
55289
  var SDK_WORKFLOW_TRIGGER_MAX_COUNT = 5;
55290
+ var SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH = 120;
55291
+ var SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT = 10;
55026
55292
  var SDK_WORKFLOW_MAX_COUNT = 50;
55027
55293
  var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
55028
55294
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
55029
55295
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
55030
55296
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
55031
- var sdkWorkflowIdSchema = z65.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
55297
+ var sdkWorkflowIdSchema = z66.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
55032
55298
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
55033
55299
  });
55034
- var sdkWorkflowEndpointSchema = z65.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
55035
- var sdkWorkflowManualTriggerSchema = z65.object({
55036
- type: z65.literal("manual")
55300
+ var sdkWorkflowEndpointSchema = z66.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
55301
+ var sdkWorkflowManualTriggerSchema = z66.object({
55302
+ type: z66.literal("manual")
55303
+ }).strict();
55304
+ var sdkWorkflowTriggerFieldSchema = z66.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
55305
+ message: "Workflow trigger fields must be top-level content field IDs, not paths"
55306
+ });
55307
+ var sdkWorkflowFieldChangedConditionSchema = z66.object({
55308
+ field: sdkWorkflowTriggerFieldSchema,
55309
+ changed: z66.literal(true)
55037
55310
  }).strict();
55038
- var sdkWorkflowTriggerSchema = z65.discriminatedUnion("type", [
55039
- sdkWorkflowManualTriggerSchema
55311
+ var sdkWorkflowFieldEmptyConditionSchema = z66.object({
55312
+ field: sdkWorkflowTriggerFieldSchema,
55313
+ isEmpty: z66.boolean()
55314
+ }).strict();
55315
+ var sdkWorkflowEntryDraftUpdatedTriggerSchema = z66.object({
55316
+ type: z66.literal("entry.draft.updated"),
55317
+ when: z66.array(
55318
+ z66.union([
55319
+ sdkWorkflowFieldChangedConditionSchema,
55320
+ sdkWorkflowFieldEmptyConditionSchema
55321
+ ])
55322
+ ).min(1).max(SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT)
55323
+ }).strict();
55324
+ var sdkWorkflowTriggerSchema = z66.discriminatedUnion("type", [
55325
+ sdkWorkflowManualTriggerSchema,
55326
+ sdkWorkflowEntryDraftUpdatedTriggerSchema
55040
55327
  ]);
55041
- var sdkWorkflowConfirmationSchema = z65.object({
55042
- title: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
55043
- body: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
55328
+ var sdkWorkflowConfirmationSchema = z66.object({
55329
+ title: z66.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
55330
+ body: z66.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
55044
55331
  }).strict();
55045
- var sdkWorkflowConfigSchema = z65.object({
55332
+ var sdkWorkflowConfigSchema = z66.object({
55046
55333
  id: sdkWorkflowIdSchema,
55047
- title: z65.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
55048
- description: z65.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
55049
- contentType: z65.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
55334
+ title: z66.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
55335
+ description: z66.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
55336
+ contentType: z66.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
55050
55337
  endpoint: sdkWorkflowEndpointSchema,
55051
- triggers: z65.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
55338
+ triggers: z66.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
55052
55339
  confirmation: sdkWorkflowConfirmationSchema.optional()
55053
55340
  }).strict();
55054
- var sdkWorkflowsSchema = z65.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
55341
+ var sdkWorkflowsSchema = z66.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
55055
55342
  const ids = workflows.map((workflow) => workflow.id);
55056
55343
  return ids.length === new Set(ids).size;
55057
55344
  }, { message: "Workflow IDs must be unique" }).optional();
55058
- var riverbankSiteConfigInputSchema = z65.object({
55059
- siteId: z65.string().uuid(),
55060
- previewUrl: z65.string().url().optional(),
55061
- liveUrl: z65.string().url().optional(),
55345
+ var riverbankSiteConfigInputSchema = z66.object({
55346
+ siteId: z66.string().uuid(),
55347
+ previewUrl: z66.string().url().optional(),
55348
+ liveUrl: z66.string().url().optional(),
55062
55349
  theme: sdkThemeConfigSchema.optional(),
55063
55350
  styles: sdkSiteStyleConfigSchema.optional(),
55064
55351
  layout: sdkSiteLayoutConfigSchema.optional(),
55065
- customBlocks: z65.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
55352
+ customBlocks: z66.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
55066
55353
  const ids = blocks.map((b) => b.id);
55067
55354
  return ids.length === new Set(ids).size;
55068
55355
  }, { message: "Block IDs must be unique" }).optional(),
@@ -55070,48 +55357,51 @@ var riverbankSiteConfigInputSchema = z65.object({
55070
55357
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
55071
55358
  workflows: sdkWorkflowsSchema,
55072
55359
  content: sdkContentConfigSchema.optional(),
55073
- contentDir: z65.string().optional(),
55074
- sync: z65.object({
55075
- existingEntries: z65.enum(["skip", "update"]).optional()
55360
+ contentDir: z66.string().optional(),
55361
+ sync: z66.object({
55362
+ existingEntries: z66.enum(["skip", "update"]).optional()
55076
55363
  }).optional(),
55077
- deploy: z65.object({
55078
- verifyCommand: z65.string().optional(),
55079
- prebuildOutput: z65.string().optional()
55364
+ deploy: z66.object({
55365
+ verifyCommand: z66.string().optional(),
55366
+ prebuildOutput: z66.string().optional()
55080
55367
  }).optional(),
55081
- themeSource: z65.enum(["local", "cms"]).optional(),
55082
- activeTheme: z65.string().optional(),
55083
- enablePortal: z65.boolean().optional(),
55368
+ themeSource: z66.enum(["local", "cms"]).optional(),
55369
+ activeTheme: z66.string().optional(),
55370
+ enablePortal: z66.boolean().optional(),
55084
55371
  dashboard: dashboardConfigSchema.optional()
55085
55372
  }).strict();
55086
- var pushSdkConfigBodySchema = z65.object({
55373
+ var pushSdkConfigBodySchema = z66.object({
55087
55374
  config: riverbankSiteConfigInputSchema,
55088
- forceContentTypes: z65.boolean().optional()
55375
+ forceContentTypes: z66.boolean().optional()
55089
55376
  }).strict();
55090
55377
 
55091
55378
  // ../api/src/siteOnboarding.ts
55092
- import { z as z66 } from "zod";
55379
+ import { z as z67 } from "zod";
55093
55380
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
55094
55381
  configure_appointments: {
55095
55382
  requirementId: "configure_appointments",
55096
55383
  reason: "launch_anyway"
55097
55384
  }
55098
55385
  };
55099
- var acknowledgeLaunchRequirementRequestSchema = z66.discriminatedUnion(
55386
+ var acknowledgeLaunchRequirementRequestSchema = z67.discriminatedUnion(
55100
55387
  "requirementId",
55101
55388
  [
55102
- z66.object({
55103
- requirementId: z66.literal("review_generated_site")
55389
+ z67.object({
55390
+ requirementId: z67.literal("review_generated_site")
55104
55391
  }),
55105
- z66.object({
55106
- requirementId: z66.literal(
55392
+ z67.object({
55393
+ requirementId: z67.literal(
55107
55394
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
55108
55395
  ),
55109
- overrideReason: z66.literal(
55396
+ overrideReason: z67.literal(
55110
55397
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
55111
55398
  )
55112
55399
  })
55113
55400
  ]
55114
55401
  );
55402
+ var goLiveSiteRequestSchema = z67.object({
55403
+ acceptExtraSiteCharge: z67.boolean().optional()
55404
+ });
55115
55405
 
55116
55406
  // ../surfaces/src/index.ts
55117
55407
  var SURFACE_IDS = ["core", "macadamia"];
@@ -55291,79 +55581,94 @@ function isRecord4(value) {
55291
55581
  }
55292
55582
 
55293
55583
  // ../api/src/appointmentSetup.ts
55294
- import { z as z67 } from "zod";
55295
- var appointmentSetupRefSchema = z67.discriminatedUnion("kind", [
55296
- z67.object({ kind: z67.literal("existing"), id: z67.string().min(1) }),
55297
- z67.object({ kind: z67.literal("new"), draftId: z67.string().min(1) })
55584
+ import { z as z68 } from "zod";
55585
+ var appointmentSetupRefSchema = z68.discriminatedUnion("kind", [
55586
+ z68.object({ kind: z68.literal("existing"), id: z68.string().min(1) }),
55587
+ z68.object({ kind: z68.literal("new"), draftId: z68.string().min(1) })
55298
55588
  ]);
55299
- var appointmentSetupVenueChoiceSchema = z67.discriminatedUnion("kind", [
55300
- z67.object({ kind: z67.literal("none") }),
55301
- z67.object({ kind: z67.literal("existing"), venueId: z67.string().min(1) }),
55302
- z67.object({
55303
- kind: z67.literal("create"),
55304
- draftId: z67.string().min(1),
55305
- title: z67.string().trim().min(1),
55306
- description: z67.string().nullable(),
55307
- timezone: z67.string().trim().min(1).nullable(),
55308
- addressJson: z67.record(z67.string(), z67.unknown()),
55309
- locationJson: z67.object({ lat: z67.number(), lng: z67.number() }).nullable()
55589
+ var appointmentSetupVenueChoiceSchema = z68.discriminatedUnion("kind", [
55590
+ z68.object({ kind: z68.literal("none") }),
55591
+ z68.object({ kind: z68.literal("existing"), venueId: z68.string().min(1) }),
55592
+ z68.object({
55593
+ kind: z68.literal("create"),
55594
+ draftId: z68.string().min(1),
55595
+ title: z68.string().trim().min(1),
55596
+ description: z68.string().nullable(),
55597
+ timezone: z68.string().trim().min(1).nullable(),
55598
+ addressJson: z68.record(z68.string(), z68.unknown()),
55599
+ locationJson: z68.object({ lat: z68.number(), lng: z68.number() }).nullable()
55310
55600
  })
55311
55601
  ]);
55312
- var appointmentSetupPaymentDraftSchema = z67.object({
55313
- priceType: z67.union([z67.literal("free"), z67.literal("paid")])
55314
- });
55315
- var appointmentSetupServiceAssignmentDraftSchema = z67.discriminatedUnion("kind", [
55316
- z67.object({ kind: z67.literal("all_practitioners") }),
55317
- z67.object({
55318
- kind: z67.literal("selected_practitioners"),
55319
- resourceRefs: z67.array(appointmentSetupRefSchema)
55602
+ var appointmentSetupPaymentDraftSchema = z68.object({
55603
+ priceType: z68.union([z68.literal("free"), z68.literal("paid")])
55604
+ });
55605
+ var appointmentSetupServiceAssignmentDraftSchema = z68.discriminatedUnion("kind", [
55606
+ z68.object({ kind: z68.literal("all_practitioners") }),
55607
+ z68.object({
55608
+ kind: z68.literal("selected_practitioners"),
55609
+ resourceRefs: z68.array(appointmentSetupRefSchema)
55320
55610
  })
55321
55611
  ]);
55322
- var appointmentSetupServiceDraftSchema = z67.object({
55612
+ var appointmentSetupServiceDraftSchema = z68.object({
55323
55613
  ref: appointmentSetupRefSchema,
55324
- title: z67.string().trim().min(1),
55325
- description: z67.string().nullable(),
55326
- durationMinutes: z67.number().int().positive(),
55327
- priceAmount: z67.number().int().nonnegative().nullable(),
55328
- isActive: z67.boolean(),
55329
- locationType: z67.union([
55330
- z67.literal("virtual"),
55331
- z67.literal("in_person"),
55332
- z67.literal("hybrid")
55614
+ title: z68.string().trim().min(1),
55615
+ description: z68.string().nullable(),
55616
+ durationMinutes: z68.number().int().positive(),
55617
+ priceAmount: z68.number().int().nonnegative().nullable(),
55618
+ isActive: z68.boolean(),
55619
+ locationType: z68.union([
55620
+ z68.literal("virtual"),
55621
+ z68.literal("in_person"),
55622
+ z68.literal("hybrid")
55333
55623
  ]),
55334
55624
  venue: appointmentSetupVenueChoiceSchema,
55335
- timezone: z67.string().trim().min(1).nullable(),
55625
+ timezone: z68.string().trim().min(1).nullable(),
55336
55626
  payment: appointmentSetupPaymentDraftSchema,
55337
55627
  assignment: appointmentSetupServiceAssignmentDraftSchema
55628
+ }).superRefine((service, ctx) => {
55629
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
55630
+ ctx.addIssue({
55631
+ code: "custom",
55632
+ path: ["priceAmount"],
55633
+ message: "Paid appointment services need a positive price."
55634
+ });
55635
+ }
55636
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
55637
+ ctx.addIssue({
55638
+ code: "custom",
55639
+ path: ["priceAmount"],
55640
+ message: "Free appointment services cannot carry a positive price."
55641
+ });
55642
+ }
55338
55643
  });
55339
- var appointmentSetupPractitionerDraftSchema = z67.object({
55644
+ var appointmentSetupPractitionerDraftSchema = z68.object({
55340
55645
  ref: appointmentSetupRefSchema,
55341
- displayName: z67.string().trim().min(1),
55342
- bio: z67.string().nullable(),
55343
- timezone: z67.string().trim().min(1),
55344
- colorHex: z67.string().nullable()
55345
- });
55346
- var appointmentSetupWeeklyWindowDraftSchema = z67.object({
55347
- weekday: z67.number().int().min(0).max(6),
55348
- startTime: z67.string(),
55349
- endTime: z67.string()
55350
- });
55351
- var appointmentSetupAvailabilityDraftSchema = z67.object({
55352
- kind: z67.literal("weekly_windows"),
55646
+ displayName: z68.string().trim().min(1),
55647
+ bio: z68.string().nullable(),
55648
+ timezone: z68.string().trim().min(1),
55649
+ colorHex: z68.string().nullable()
55650
+ });
55651
+ var appointmentSetupWeeklyWindowDraftSchema = z68.object({
55652
+ weekday: z68.number().int().min(0).max(6),
55653
+ startTime: z68.string(),
55654
+ endTime: z68.string()
55655
+ });
55656
+ var appointmentSetupAvailabilityDraftSchema = z68.object({
55657
+ kind: z68.literal("weekly_windows"),
55353
55658
  resourceRef: appointmentSetupRefSchema,
55354
55659
  serviceRef: appointmentSetupRefSchema.nullable(),
55355
- windows: z67.array(appointmentSetupWeeklyWindowDraftSchema)
55660
+ windows: z68.array(appointmentSetupWeeklyWindowDraftSchema)
55356
55661
  });
55357
55662
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
55358
55663
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
55359
- var appointmentSetupBookingNoticeSchema = z67.object({
55360
- minLeadMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
55361
- maxBookingNoticeMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
55362
- });
55363
- var applyAppointmentSetupRequestSchema = z67.object({
55364
- services: z67.array(appointmentSetupServiceDraftSchema),
55365
- practitioners: z67.array(appointmentSetupPractitionerDraftSchema),
55366
- availability: z67.array(appointmentSetupAvailabilityDraftSchema),
55664
+ var appointmentSetupBookingNoticeSchema = z68.object({
55665
+ minLeadMinutes: z68.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
55666
+ maxBookingNoticeMinutes: z68.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
55667
+ });
55668
+ var applyAppointmentSetupRequestSchema = z68.object({
55669
+ services: z68.array(appointmentSetupServiceDraftSchema),
55670
+ practitioners: z68.array(appointmentSetupPractitionerDraftSchema),
55671
+ availability: z68.array(appointmentSetupAvailabilityDraftSchema),
55367
55672
  bookingNotice: appointmentSetupBookingNoticeSchema
55368
55673
  });
55369
55674
 
@@ -55396,24 +55701,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
55396
55701
  ];
55397
55702
 
55398
55703
  // ../api/src/siteBanner.ts
55399
- import { z as z68 } from "zod";
55704
+ import { z as z69 } from "zod";
55400
55705
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
55401
55706
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
55402
55707
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
55403
55708
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
55404
- var siteBannerScopeSchema = z68.enum(SITE_BANNER_SCOPE_VALUES);
55405
- var siteBannerToneSchema = z68.enum(SITE_BANNER_TONE_VALUES);
55406
- var siteBannerBodySchema = z68.unknown().transform(unwrapRichTextValue);
55407
- var siteBannerCtaSchema = z68.object({
55408
- label: z68.string().trim().min(1),
55709
+ var siteBannerScopeSchema = z69.enum(SITE_BANNER_SCOPE_VALUES);
55710
+ var siteBannerToneSchema = z69.enum(SITE_BANNER_TONE_VALUES);
55711
+ var siteBannerBodySchema = z69.unknown().transform(unwrapRichTextValue);
55712
+ var siteBannerCtaSchema = z69.object({
55713
+ label: z69.string().trim().min(1),
55409
55714
  link: linkPayloadSchema
55410
55715
  });
55411
- var siteBannerSettingsSchema = z68.discriminatedUnion("enabled", [
55412
- z68.object({
55413
- enabled: z68.literal(false)
55716
+ var siteBannerSettingsSchema = z69.discriminatedUnion("enabled", [
55717
+ z69.object({
55718
+ enabled: z69.literal(false)
55414
55719
  }),
55415
- z68.object({
55416
- enabled: z68.literal(true),
55720
+ z69.object({
55721
+ enabled: z69.literal(true),
55417
55722
  scope: siteBannerScopeSchema,
55418
55723
  tone: siteBannerToneSchema,
55419
55724
  body: siteBannerBodySchema,
@@ -55427,7 +55732,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
55427
55732
  const analysis = analyzeSiteBannerBody(value.body);
55428
55733
  for (const issue2 of analysis.issues) {
55429
55734
  ctx.addIssue({
55430
- code: z68.ZodIssueCode.custom,
55735
+ code: z69.ZodIssueCode.custom,
55431
55736
  path: ["body"],
55432
55737
  message: siteBannerBodyIssueMessage(issue2)
55433
55738
  });
@@ -55616,71 +55921,71 @@ function collectText(node) {
55616
55921
  }
55617
55922
 
55618
55923
  // ../api/src/aiPlayground.ts
55619
- import { z as z69 } from "zod";
55620
- var Rfc6902PatchOp = z69.discriminatedUnion("op", [
55924
+ import { z as z70 } from "zod";
55925
+ var Rfc6902PatchOp = z70.discriminatedUnion("op", [
55621
55926
  // Standard RFC-6902 operations
55622
- z69.object({
55623
- op: z69.literal("add"),
55624
- path: z69.string(),
55625
- value: z69.unknown()
55927
+ z70.object({
55928
+ op: z70.literal("add"),
55929
+ path: z70.string(),
55930
+ value: z70.unknown()
55626
55931
  }),
55627
- z69.object({
55628
- op: z69.literal("remove"),
55629
- path: z69.string()
55932
+ z70.object({
55933
+ op: z70.literal("remove"),
55934
+ path: z70.string()
55630
55935
  }),
55631
- z69.object({
55632
- op: z69.literal("replace"),
55633
- path: z69.string(),
55634
- value: z69.unknown()
55936
+ z70.object({
55937
+ op: z70.literal("replace"),
55938
+ path: z70.string(),
55939
+ value: z70.unknown()
55635
55940
  }),
55636
- z69.object({
55637
- op: z69.literal("move"),
55638
- from: z69.string(),
55639
- path: z69.string()
55941
+ z70.object({
55942
+ op: z70.literal("move"),
55943
+ from: z70.string(),
55944
+ path: z70.string()
55640
55945
  }),
55641
- z69.object({
55642
- op: z69.literal("copy"),
55643
- from: z69.string(),
55644
- path: z69.string()
55946
+ z70.object({
55947
+ op: z70.literal("copy"),
55948
+ from: z70.string(),
55949
+ path: z70.string()
55645
55950
  }),
55646
55951
  // Block-level operations (Phase 2)
55647
- z69.object({
55648
- op: z69.literal("add_block"),
55649
- blockKind: z69.string(),
55650
- afterBlockId: z69.string().nullable(),
55651
- content: z69.record(z69.string(), z69.unknown()),
55652
- rationale: z69.string()
55952
+ z70.object({
55953
+ op: z70.literal("add_block"),
55954
+ blockKind: z70.string(),
55955
+ afterBlockId: z70.string().nullable(),
55956
+ content: z70.record(z70.string(), z70.unknown()),
55957
+ rationale: z70.string()
55653
55958
  }),
55654
- z69.object({
55655
- op: z69.literal("delete_block"),
55656
- blockId: z69.string(),
55657
- rationale: z69.string()
55959
+ z70.object({
55960
+ op: z70.literal("delete_block"),
55961
+ blockId: z70.string(),
55962
+ rationale: z70.string()
55658
55963
  }),
55659
- z69.object({
55660
- op: z69.literal("reorder_block"),
55661
- blockId: z69.string(),
55662
- afterBlockId: z69.string().nullable(),
55663
- rationale: z69.string()
55964
+ z70.object({
55965
+ op: z70.literal("reorder_block"),
55966
+ blockId: z70.string(),
55967
+ afterBlockId: z70.string().nullable(),
55968
+ rationale: z70.string()
55664
55969
  })
55665
55970
  ]);
55666
- var PlaygroundProposeRequest = z69.object({
55667
- request: z69.string().min(1).max(2e3)
55971
+ var PlaygroundProposeRequest = z70.object({
55972
+ request: z70.string().min(1).max(2e3)
55668
55973
  });
55669
- var MultiPagePatchEnvelope = z69.object({
55670
- pageId: z69.string(),
55671
- blockId: z69.string().optional(),
55974
+ var MultiPagePatchEnvelope = z70.object({
55975
+ pageId: z70.string(),
55976
+ blockId: z70.string().optional(),
55672
55977
  // Not present for page-level ops
55673
- blockKind: z69.string().optional(),
55674
- blockPurpose: z69.string().optional().nullable(),
55675
- ops: z69.array(Rfc6902PatchOp),
55676
- rationale: z69.string(),
55677
- currentContent: z69.record(z69.string(), z69.unknown()).optional()
55678
- });
55679
- var MultiPageUpdateResponse = z69.object({
55680
- patches: z69.array(MultiPagePatchEnvelope),
55681
- assistantMessage: z69.string(),
55682
- pagesModified: z69.number(),
55683
- toolCallsUsed: z69.number()
55978
+ blockKind: z70.string().optional(),
55979
+ blockPurpose: z70.string().optional().nullable(),
55980
+ ops: z70.array(Rfc6902PatchOp),
55981
+ rationale: z70.string(),
55982
+ currentContent: z70.record(z70.string(), z70.unknown()).optional()
55983
+ });
55984
+ var MultiPageUpdateResponse = z70.object({
55985
+ patches: z70.array(MultiPagePatchEnvelope),
55986
+ assistantMessage: z70.string(),
55987
+ pagesModified: z70.number(),
55988
+ toolCallsUsed: z70.number()
55684
55989
  });
55685
55990
 
55686
55991
  // src/rendering/components/Block.shared.tsx