@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",
@@ -48974,6 +49155,17 @@ function normalizeLoaderParams(endpoint, params, context) {
48974
49155
  // ../blocks/src/primitives/content/primitives.tsx
48975
49156
  var RichText2 = RichText;
48976
49157
 
49158
+ // ../api/src/apiEndpointTypes.ts
49159
+ function blockedDemoMutationPolicy(classification, publicMessage) {
49160
+ if (publicMessage.trim() === "") {
49161
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
49162
+ }
49163
+ return {
49164
+ classification,
49165
+ publicMessage
49166
+ };
49167
+ }
49168
+
48977
49169
  // ../api/src/cache-tags.ts
48978
49170
  var TAG_TEMPLATES = {
48979
49171
  siteCollection: "riverbank:site",
@@ -49004,6 +49196,18 @@ var TAG_TEMPLATES = {
49004
49196
  };
49005
49197
 
49006
49198
  // ../api/src/endpoints.ts
49199
+ var DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
49200
+ "blocked-hidden",
49201
+ "This action is not available in demo sites."
49202
+ );
49203
+ var DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
49204
+ "blocked-disabled",
49205
+ "This setting is disabled in demo sites."
49206
+ );
49207
+ var DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
49208
+ "internal-only",
49209
+ "This internal operation is not available in demo sites."
49210
+ );
49007
49211
  var ENDPOINT_DEFINITIONS = {
49008
49212
  // AI endpoints - no cache due to dynamic nature
49009
49213
  aiContentUpdateChat: {
@@ -49120,7 +49324,8 @@ var ENDPOINT_DEFINITIONS = {
49120
49324
  path: "/sites/{siteId}/ai/generate",
49121
49325
  method: "POST",
49122
49326
  auth: "user",
49123
- responseKind: "json"
49327
+ responseKind: "json",
49328
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49124
49329
  },
49125
49330
  getOnboardingPreviewStatus: {
49126
49331
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -49141,7 +49346,8 @@ var ENDPOINT_DEFINITIONS = {
49141
49346
  method: "POST",
49142
49347
  auth: "user",
49143
49348
  errors: [],
49144
- responseKind: "json"
49349
+ responseKind: "json",
49350
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
49145
49351
  },
49146
49352
  goLiveSite: {
49147
49353
  path: "/sites/{siteId}/launch/go-live",
@@ -49210,20 +49416,23 @@ var ENDPOINT_DEFINITIONS = {
49210
49416
  path: "/sites/{siteId}/ai/site-wizard/goals",
49211
49417
  method: "POST",
49212
49418
  auth: "user",
49213
- responseKind: "json"
49419
+ responseKind: "json",
49420
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49214
49421
  },
49215
49422
  aiSiteWizardIntakeTriage: {
49216
49423
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
49217
49424
  method: "POST",
49218
49425
  auth: "user",
49219
- responseKind: "json"
49426
+ responseKind: "json",
49427
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49220
49428
  },
49221
49429
  aiSiteWizardTelemetry: {
49222
49430
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
49223
49431
  method: "POST",
49224
49432
  auth: "user",
49225
49433
  errors: [],
49226
- responseKind: "json"
49434
+ responseKind: "json",
49435
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49227
49436
  },
49228
49437
  // Admin SEO
49229
49438
  listGscPropertiesAdmin: {
@@ -49430,7 +49639,7 @@ var ENDPOINT_DEFINITIONS = {
49430
49639
  responseKind: "json",
49431
49640
  errors: ["resource:not_found", "server:internal_error"]
49432
49641
  },
49433
- // Ops (event hosts/admins)
49642
+ // Ops (staff event operators/admins)
49434
49643
  opsListUpcomingEventOccurrences: {
49435
49644
  path: "/ops/sites/{siteId}/events",
49436
49645
  method: "GET",
@@ -49448,6 +49657,7 @@ var ENDPOINT_DEFINITIONS = {
49448
49657
  method: "POST",
49449
49658
  auth: "user",
49450
49659
  responseKind: "json",
49660
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49451
49661
  errors: [
49452
49662
  "validation:invalid_input",
49453
49663
  "auth:forbidden",
@@ -49460,6 +49670,7 @@ var ENDPOINT_DEFINITIONS = {
49460
49670
  method: "POST",
49461
49671
  auth: "user",
49462
49672
  responseKind: "json",
49673
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49463
49674
  errors: [
49464
49675
  "validation:invalid_input",
49465
49676
  "auth:forbidden",
@@ -49478,6 +49689,7 @@ var ENDPOINT_DEFINITIONS = {
49478
49689
  method: "POST",
49479
49690
  auth: "user",
49480
49691
  responseKind: "json",
49692
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49481
49693
  errors: [
49482
49694
  "validation:invalid_input",
49483
49695
  "auth:forbidden",
@@ -49511,6 +49723,7 @@ var ENDPOINT_DEFINITIONS = {
49511
49723
  method: "POST",
49512
49724
  auth: "user",
49513
49725
  responseKind: "json",
49726
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
49514
49727
  errors: [
49515
49728
  "validation:invalid_input",
49516
49729
  "auth:forbidden",
@@ -49539,7 +49752,8 @@ var ENDPOINT_DEFINITIONS = {
49539
49752
  method: "POST",
49540
49753
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
49541
49754
  auth: "user",
49542
- responseKind: "json"
49755
+ responseKind: "json",
49756
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49543
49757
  },
49544
49758
  previewEmailTemplate: {
49545
49759
  path: "/sites/{siteId}/settings/emails/preview",
@@ -49590,14 +49804,16 @@ var ENDPOINT_DEFINITIONS = {
49590
49804
  method: "POST",
49591
49805
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49592
49806
  auth: "user",
49593
- responseKind: "json"
49807
+ responseKind: "json",
49808
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49594
49809
  },
49595
49810
  createNewsletterSubscribersImportUploadUrl: {
49596
49811
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
49597
49812
  method: "POST",
49598
49813
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49599
49814
  auth: "user",
49600
- responseKind: "json"
49815
+ responseKind: "json",
49816
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49601
49817
  },
49602
49818
  exportNewsletterSubscribersCsv: {
49603
49819
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -49794,14 +50010,16 @@ var ENDPOINT_DEFINITIONS = {
49794
50010
  method: "POST",
49795
50011
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49796
50012
  auth: "user",
49797
- responseKind: "json"
50013
+ responseKind: "json",
50014
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49798
50015
  },
49799
50016
  testSendNewsletterCampaign: {
49800
50017
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
49801
50018
  method: "POST",
49802
50019
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
49803
50020
  auth: "user",
49804
- responseKind: "json"
50021
+ responseKind: "json",
50022
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
49805
50023
  },
49806
50024
  listNewsletterSendJobs: {
49807
50025
  path: "/sites/{siteId}/newsletter/jobs",
@@ -50489,7 +50707,8 @@ var ENDPOINT_DEFINITIONS = {
50489
50707
  method: "DELETE",
50490
50708
  tags: ["site", "site-{siteId}"],
50491
50709
  auth: "user",
50492
- responseKind: "json"
50710
+ responseKind: "json",
50711
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
50493
50712
  },
50494
50713
  listSiteMembers: {
50495
50714
  path: "/sites/{siteId}/members",
@@ -50945,7 +51164,8 @@ var ENDPOINT_DEFINITIONS = {
50945
51164
  method: "POST",
50946
51165
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
50947
51166
  auth: "user",
50948
- responseKind: "json"
51167
+ responseKind: "json",
51168
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
50949
51169
  },
50950
51170
  updateSiteGeneralSettings: {
50951
51171
  path: "/sites/{siteId}/settings/general",
@@ -51753,6 +51973,14 @@ var ENDPOINT_DEFINITIONS = {
51753
51973
  auth: "user",
51754
51974
  responseKind: "json"
51755
51975
  },
51976
+ saveSiteChromeLookSelection: {
51977
+ path: "/sites/{siteId}/theme/site-chrome-look",
51978
+ method: "POST",
51979
+ tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme],
51980
+ auth: "user",
51981
+ errors: [],
51982
+ responseKind: "json"
51983
+ },
51756
51984
  uploadSiteLogo: {
51757
51985
  path: "/storage/upload-site-logo",
51758
51986
  method: "POST",
@@ -53176,6 +53404,7 @@ var ENDPOINT_DEFINITIONS = {
53176
53404
  method: "POST",
53177
53405
  tags: ["site-{siteId}"],
53178
53406
  auth: "user",
53407
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
53179
53408
  errors: [
53180
53409
  "validation:invalid_input",
53181
53410
  "auth:forbidden",
@@ -53190,6 +53419,7 @@ var ENDPOINT_DEFINITIONS = {
53190
53419
  method: "POST",
53191
53420
  tags: ["site-{siteId}"],
53192
53421
  auth: "user",
53422
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
53193
53423
  errors: [
53194
53424
  "validation:invalid_input",
53195
53425
  "auth:forbidden",
@@ -53499,6 +53729,7 @@ var ENDPOINT_DEFINITIONS = {
53499
53729
  tags: ["site-{siteId}", "passes-{siteId}"],
53500
53730
  auth: "user",
53501
53731
  responseKind: "json",
53732
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53502
53733
  errors: ["validation:invalid_input", "server:internal_error"]
53503
53734
  },
53504
53735
  getBookingPass: {
@@ -53514,6 +53745,7 @@ var ENDPOINT_DEFINITIONS = {
53514
53745
  tags: ["site-{siteId}", "passes-{siteId}"],
53515
53746
  auth: "user",
53516
53747
  responseKind: "json",
53748
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53517
53749
  errors: [
53518
53750
  "validation:invalid_input",
53519
53751
  "resource:not_found",
@@ -53526,6 +53758,7 @@ var ENDPOINT_DEFINITIONS = {
53526
53758
  tags: ["site-{siteId}", "passes-{siteId}"],
53527
53759
  auth: "user",
53528
53760
  responseKind: "json",
53761
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53529
53762
  errors: [
53530
53763
  "validation:invalid_input",
53531
53764
  "resource:not_found",
@@ -53581,6 +53814,7 @@ var ENDPOINT_DEFINITIONS = {
53581
53814
  tags: ["site-{siteId}", "memberships-{siteId}"],
53582
53815
  auth: "user",
53583
53816
  responseKind: "json",
53817
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53584
53818
  errors: ["validation:invalid_input", "server:internal_error"]
53585
53819
  },
53586
53820
  getBookingMembership: {
@@ -53596,6 +53830,7 @@ var ENDPOINT_DEFINITIONS = {
53596
53830
  tags: ["site-{siteId}", "memberships-{siteId}"],
53597
53831
  auth: "user",
53598
53832
  responseKind: "json",
53833
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53599
53834
  errors: [
53600
53835
  "validation:invalid_input",
53601
53836
  "resource:not_found",
@@ -53608,6 +53843,7 @@ var ENDPOINT_DEFINITIONS = {
53608
53843
  tags: ["site-{siteId}", "memberships-{siteId}"],
53609
53844
  auth: "user",
53610
53845
  responseKind: "json",
53846
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53611
53847
  errors: [
53612
53848
  "validation:invalid_input",
53613
53849
  "resource:not_found",
@@ -53824,6 +54060,7 @@ var ENDPOINT_DEFINITIONS = {
53824
54060
  tags: ["site-{siteId}", "customers-{siteId}"],
53825
54061
  auth: "user",
53826
54062
  responseKind: "json",
54063
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
53827
54064
  errors: [
53828
54065
  "validation:invalid_input",
53829
54066
  "auth:forbidden",
@@ -54197,6 +54434,14 @@ var ENDPOINT_DEFINITIONS = {
54197
54434
  auth: "admin",
54198
54435
  responseKind: "json"
54199
54436
  },
54437
+ adminScheduleBillingComponentEnd: {
54438
+ path: "/admin/sites/{siteId}/billing/components/{componentId}/end",
54439
+ method: "POST",
54440
+ tags: ["admin", "site-{siteId}", "billing"],
54441
+ auth: "admin",
54442
+ responseKind: "json",
54443
+ errors: []
54444
+ },
54200
54445
  // Admin GSC/SEO endpoints
54201
54446
  adminGscVerifyStart: {
54202
54447
  path: "/admin/seo/gsc/properties/verify/start",
@@ -54921,6 +55166,13 @@ var ENDPOINT_DEFINITIONS = {
54921
55166
  auth: "public",
54922
55167
  responseKind: "json"
54923
55168
  },
55169
+ demoClaimMagicLink: {
55170
+ path: "/demo/auth/send-magic-link",
55171
+ method: "POST",
55172
+ auth: "public",
55173
+ responseKind: "json",
55174
+ errors: []
55175
+ },
54924
55176
  previewExchangeCode: {
54925
55177
  path: "/preview/auth/exchange",
54926
55178
  method: "POST",
@@ -55079,61 +55331,74 @@ var ENDPOINT_DEFINITIONS = {
55079
55331
  }
55080
55332
  };
55081
55333
 
55082
- // ../api/src/navigation/contracts.ts
55334
+ // ../api/src/accessAdmin.ts
55083
55335
  import { z as z64 } from "zod";
55084
- var portalLinkPayloadSchema = z64.object({
55085
- kind: z64.literal("portal"),
55086
- path: z64.string().trim().startsWith("/").optional(),
55087
- labels: z64.object({
55088
- loggedOut: z64.string().trim().min(1).optional(),
55089
- loggedIn: z64.string().trim().min(1).optional()
55336
+ var managedDomainAddOnPricingSnapshotSchema = z64.object({
55337
+ formulaVersion: z64.literal("managed-domain-overage-v1"),
55338
+ conversionRule: z64.literal("usd-to-gbp-1-to-1-v1"),
55339
+ registrarAnnualCost: z64.number().nonnegative(),
55340
+ registrarCurrency: z64.literal("USD"),
55341
+ includedAnnualAllowance: z64.number().nonnegative(),
55342
+ includedAnnualAllowanceCurrency: z64.literal("USD"),
55343
+ monthlyAmountCents: z64.number().int().nonnegative(),
55344
+ monthlyCurrency: z64.literal("gbp")
55345
+ });
55346
+
55347
+ // ../api/src/navigation/contracts.ts
55348
+ import { z as z65 } from "zod";
55349
+ var portalLinkPayloadSchema = z65.object({
55350
+ kind: z65.literal("portal"),
55351
+ path: z65.string().trim().startsWith("/").optional(),
55352
+ labels: z65.object({
55353
+ loggedOut: z65.string().trim().min(1).optional(),
55354
+ loggedIn: z65.string().trim().min(1).optional()
55090
55355
  }).optional()
55091
55356
  });
55092
- var cartLinkLabelConfigSchema = z64.discriminatedUnion("kind", [
55093
- z64.object({
55094
- kind: z64.literal("icon-only")
55357
+ var cartLinkLabelConfigSchema = z65.discriminatedUnion("kind", [
55358
+ z65.object({
55359
+ kind: z65.literal("icon-only")
55095
55360
  }),
55096
- z64.object({
55097
- kind: z64.literal("icon-with-label"),
55098
- label: z64.string().trim().min(1)
55361
+ z65.object({
55362
+ kind: z65.literal("icon-with-label"),
55363
+ label: z65.string().trim().min(1)
55099
55364
  })
55100
55365
  ]);
55101
- var cartLinkPayloadSchema = z64.object({
55102
- kind: z64.literal("cart"),
55103
- badge: z64.enum(["show-count", "hidden"]),
55366
+ var cartLinkPayloadSchema = z65.object({
55367
+ kind: z65.literal("cart"),
55368
+ badge: z65.enum(["show-count", "hidden"]),
55104
55369
  label: cartLinkLabelConfigSchema
55105
55370
  });
55106
- var internalLinkPayloadSchema = z64.object({
55107
- kind: z64.literal("internal"),
55108
- routeId: z64.string().uuid(),
55109
- entityId: z64.string().uuid(),
55110
- entityType: z64.enum(["page", "content"]),
55111
- href: z64.string().min(1),
55112
- title: z64.string().min(1),
55113
- typeLabel: z64.string().min(1),
55114
- contentTypeKey: z64.string().nullable().optional(),
55115
- contentTypeName: z64.string().nullable().optional(),
55116
- updatedAt: z64.string().nullable().optional()
55371
+ var internalLinkPayloadSchema = z65.object({
55372
+ kind: z65.literal("internal"),
55373
+ routeId: z65.string().uuid(),
55374
+ entityId: z65.string().uuid(),
55375
+ entityType: z65.enum(["page", "content"]),
55376
+ href: z65.string().min(1),
55377
+ title: z65.string().min(1),
55378
+ typeLabel: z65.string().min(1),
55379
+ contentTypeKey: z65.string().nullable().optional(),
55380
+ contentTypeName: z65.string().nullable().optional(),
55381
+ updatedAt: z65.string().nullable().optional()
55117
55382
  }).passthrough();
55118
- var externalLinkSchema2 = z64.object({
55119
- kind: z64.literal("external"),
55383
+ var externalLinkSchema2 = z65.object({
55384
+ kind: z65.literal("external"),
55120
55385
  // Navigation external links are expected to be absolute URLs.
55121
- href: z64.string().url()
55386
+ href: z65.string().url()
55122
55387
  });
55123
- var customLinkSchema2 = z64.object({
55124
- kind: z64.literal("url"),
55125
- href: z64.string().min(1)
55388
+ var customLinkSchema2 = z65.object({
55389
+ kind: z65.literal("url"),
55390
+ href: z65.string().min(1)
55126
55391
  });
55127
- var pageLinkSchema2 = z64.object({
55128
- kind: z64.literal("page"),
55129
- identifier: z64.string().min(1)
55392
+ var pageLinkSchema2 = z65.object({
55393
+ kind: z65.literal("page"),
55394
+ identifier: z65.string().min(1)
55130
55395
  });
55131
- var entryLinkSchema2 = z64.object({
55132
- kind: z64.literal("entry"),
55133
- contentType: z64.string().min(1),
55134
- identifier: z64.string().min(1)
55396
+ var entryLinkSchema2 = z65.object({
55397
+ kind: z65.literal("entry"),
55398
+ contentType: z65.string().min(1),
55399
+ identifier: z65.string().min(1)
55135
55400
  });
55136
- var linkPayloadSchema = z64.discriminatedUnion("kind", [
55401
+ var linkPayloadSchema = z65.discriminatedUnion("kind", [
55137
55402
  internalLinkPayloadSchema,
55138
55403
  pageLinkSchema2,
55139
55404
  entryLinkSchema2,
@@ -55150,86 +55415,85 @@ var navigationLinkInputSchemaOptions = [
55150
55415
  portalLinkPayloadSchema,
55151
55416
  cartLinkPayloadSchema
55152
55417
  ];
55153
- var navigationLinkInputSchema = z64.discriminatedUnion(
55418
+ var navigationLinkInputSchema = z65.discriminatedUnion(
55154
55419
  "kind",
55155
55420
  navigationLinkInputSchemaOptions
55156
55421
  );
55157
55422
 
55158
55423
  // ../api/src/sdkConfig/contracts.ts
55159
- import { z as z65 } from "zod";
55424
+ import { z as z66 } from "zod";
55160
55425
  function unsafeRetypeZodSchema(schema) {
55161
55426
  return schema;
55162
55427
  }
55163
- var navIdListSchema = z65.preprocess((value) => {
55428
+ var navIdListSchema = z66.preprocess((value) => {
55164
55429
  if (!Array.isArray(value)) return void 0;
55165
55430
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
55166
55431
  return filtered.length > 0 ? filtered : void 0;
55167
- }, z65.array(z65.string()).max(200).optional());
55168
- var dashboardNavVisibilityBaseSchema = z65.object({
55169
- mode: z65.enum(["augment", "restrict"]).optional(),
55432
+ }, z66.array(z66.string()).max(200).optional());
55433
+ var dashboardNavVisibilityBaseSchema = z66.object({
55434
+ mode: z66.enum(["augment", "restrict"]).optional(),
55170
55435
  allowIds: navIdListSchema,
55171
55436
  denyIds: navIdListSchema
55172
55437
  }).strip();
55173
- var dashboardNavVisibilityRolesSchema = z65.object({
55438
+ var dashboardNavVisibilityRolesSchema = z66.object({
55174
55439
  administrator: dashboardNavVisibilityBaseSchema.optional(),
55175
55440
  editor: dashboardNavVisibilityBaseSchema.optional(),
55176
- team_member: dashboardNavVisibilityBaseSchema.optional(),
55177
- event_host: dashboardNavVisibilityBaseSchema.optional()
55441
+ team_member: dashboardNavVisibilityBaseSchema.optional()
55178
55442
  }).strip().optional();
55179
55443
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
55180
55444
  roles: dashboardNavVisibilityRolesSchema
55181
55445
  }).strip();
55182
- var dashboardNavigationConfigSchema = z65.object({
55446
+ var dashboardNavigationConfigSchema = z66.object({
55183
55447
  siteNav: dashboardNavVisibilitySchema.optional(),
55184
55448
  settingsNav: dashboardNavVisibilitySchema.optional()
55185
55449
  }).strip();
55186
- var dashboardConfigSchema = z65.object({
55187
- previewEditingEnabled: z65.boolean().optional(),
55450
+ var dashboardConfigSchema = z66.object({
55451
+ previewEditingEnabled: z66.boolean().optional(),
55188
55452
  navigation: dashboardNavigationConfigSchema.optional()
55189
55453
  }).strip();
55190
55454
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
55191
55455
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
55192
- var sdkLoaderEndpointSchema = z65.enum(SUPPORTED_LOADER_ENDPOINTS);
55193
- var loaderParamBindingSchema = z65.object({
55194
- $bind: z65.object({
55195
- from: z65.string().min(1, "Binding path is required"),
55196
- fallback: z65.string().optional()
55456
+ var sdkLoaderEndpointSchema = z66.enum(SUPPORTED_LOADER_ENDPOINTS);
55457
+ var loaderParamBindingSchema = z66.object({
55458
+ $bind: z66.object({
55459
+ from: z66.string().min(1, "Binding path is required"),
55460
+ fallback: z66.string().optional()
55197
55461
  })
55198
55462
  });
55199
- var loaderParamValueSchema = z65.union([
55200
- z65.string(),
55201
- z65.number(),
55202
- z65.boolean(),
55463
+ var loaderParamValueSchema = z66.union([
55464
+ z66.string(),
55465
+ z66.number(),
55466
+ z66.boolean(),
55203
55467
  loaderParamBindingSchema
55204
55468
  ]);
55205
- var sdkConfigLoaderSchema = z65.object({
55469
+ var sdkConfigLoaderSchema = z66.object({
55206
55470
  endpoint: sdkLoaderEndpointSchema,
55207
- params: z65.record(z65.string(), loaderParamValueSchema),
55208
- mode: z65.enum(["server", "client"]).default("server")
55471
+ params: z66.record(z66.string(), loaderParamValueSchema),
55472
+ mode: z66.enum(["server", "client"]).default("server")
55209
55473
  });
55210
- var sdkDataLoadersSchema = z65.record(z65.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
55211
- var sdkCustomBlockIdSchema = z65.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
55474
+ var sdkDataLoadersSchema = z66.record(z66.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
55475
+ var sdkCustomBlockIdSchema = z66.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
55212
55476
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
55213
55477
  }).transform((value) => value);
55214
- var sdkCustomBlockInputSchema = z65.object({
55478
+ var sdkCustomBlockInputSchema = z66.object({
55215
55479
  id: sdkCustomBlockIdSchema,
55216
- title: z65.string().min(1),
55217
- titleSource: z65.union([z65.string().min(1), z65.array(z65.string().min(1)).min(1)]).optional(),
55218
- description: z65.string().optional(),
55480
+ title: z66.string().min(1),
55481
+ titleSource: z66.union([z66.string().min(1), z66.array(z66.string().min(1)).min(1)]).optional(),
55482
+ description: z66.string().optional(),
55219
55483
  category: blockCategoryEnum,
55220
- icon: z65.string().optional(),
55221
- tags: z65.array(z65.string()).optional(),
55484
+ icon: z66.string().optional(),
55485
+ tags: z66.array(z66.string()).optional(),
55222
55486
  fields: fieldDefinitionInputSchema.array().min(1),
55223
55487
  dataLoaders: sdkDataLoadersSchema,
55224
55488
  layout: NodeSchema.optional(),
55225
- variants: z65.record(z65.string().min(1), NodeSchema).optional(),
55226
- defaultVariant: z65.string().min(1).optional(),
55227
- variantOptions: z65.record(
55228
- z65.string().min(1),
55229
- z65.object({
55230
- label: z65.string().min(1).optional(),
55231
- description: z65.string().min(1).optional(),
55232
- icon: z65.string().min(1).optional()
55489
+ variants: z66.record(z66.string().min(1), NodeSchema).optional(),
55490
+ defaultVariant: z66.string().min(1).optional(),
55491
+ variantOptions: z66.record(
55492
+ z66.string().min(1),
55493
+ z66.object({
55494
+ label: z66.string().min(1).optional(),
55495
+ description: z66.string().min(1).optional(),
55496
+ icon: z66.string().min(1).optional()
55233
55497
  })
55234
55498
  ).optional()
55235
55499
  }).superRefine((data, ctx) => {
@@ -55239,7 +55503,7 @@ var sdkCustomBlockInputSchema = z65.object({
55239
55503
  const exists = data.fields.some((field) => field.id === source);
55240
55504
  if (!exists) {
55241
55505
  ctx.addIssue({
55242
- code: z65.ZodIssueCode.custom,
55506
+ code: z66.ZodIssueCode.custom,
55243
55507
  message: `titleSource must reference a valid field ID (got "${source}")`,
55244
55508
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
55245
55509
  });
@@ -55248,7 +55512,7 @@ var sdkCustomBlockInputSchema = z65.object({
55248
55512
  }
55249
55513
  if (data.layout && data.variants) {
55250
55514
  ctx.addIssue({
55251
- code: z65.ZodIssueCode.custom,
55515
+ code: z66.ZodIssueCode.custom,
55252
55516
  message: "Custom block must define either `layout` or `variants`, not both",
55253
55517
  path: ["variants"]
55254
55518
  });
@@ -55257,14 +55521,14 @@ var sdkCustomBlockInputSchema = z65.object({
55257
55521
  const keys = Object.keys(data.variants);
55258
55522
  if (keys.length === 0) {
55259
55523
  ctx.addIssue({
55260
- code: z65.ZodIssueCode.custom,
55524
+ code: z66.ZodIssueCode.custom,
55261
55525
  message: "`variants` must contain at least one variant key",
55262
55526
  path: ["variants"]
55263
55527
  });
55264
55528
  }
55265
55529
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
55266
55530
  ctx.addIssue({
55267
- code: z65.ZodIssueCode.custom,
55531
+ code: z66.ZodIssueCode.custom,
55268
55532
  message: "`defaultVariant` must be a key present in `variants`",
55269
55533
  path: ["defaultVariant"]
55270
55534
  });
@@ -55273,7 +55537,7 @@ var sdkCustomBlockInputSchema = z65.object({
55273
55537
  for (const key of Object.keys(data.variantOptions)) {
55274
55538
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
55275
55539
  ctx.addIssue({
55276
- code: z65.ZodIssueCode.custom,
55540
+ code: z66.ZodIssueCode.custom,
55277
55541
  message: "`variantOptions` key must exist in `variants`",
55278
55542
  path: ["variantOptions", key]
55279
55543
  });
@@ -55282,74 +55546,74 @@ var sdkCustomBlockInputSchema = z65.object({
55282
55546
  }
55283
55547
  }
55284
55548
  });
55285
- var sdkBlockFieldExtensionInputSchema = z65.object({
55549
+ var sdkBlockFieldExtensionInputSchema = z66.object({
55286
55550
  fields: fieldDefinitionInputSchema.array().min(1)
55287
55551
  });
55288
- var sdkBlockFieldExtensionsInputSchema = z65.record(
55289
- z65.string().min(1),
55552
+ var sdkBlockFieldExtensionsInputSchema = z66.record(
55553
+ z66.string().min(1),
55290
55554
  sdkBlockFieldExtensionInputSchema
55291
55555
  );
55292
- var sdkThemePaletteSchema = z65.record(z65.string(), z65.string());
55293
- var sdkThemeConfigSchema = z65.object({
55556
+ var sdkThemePaletteSchema = z66.record(z66.string(), z66.string());
55557
+ var sdkThemeConfigSchema = z66.object({
55294
55558
  palette: sdkThemePaletteSchema
55295
55559
  });
55296
- var sdkSectionBackgroundSchema = z65.object({
55297
- id: z65.string().min(1),
55298
- label: z65.string().min(1),
55299
- token: z65.string().min(1)
55560
+ var sdkSectionBackgroundSchema = z66.object({
55561
+ id: z66.string().min(1),
55562
+ label: z66.string().min(1),
55563
+ token: z66.string().min(1)
55300
55564
  });
55301
- var sdkSectionOptionsConfigSchema = z65.object({
55302
- backgroundColor: z65.boolean().optional(),
55303
- backgroundImage: z65.boolean().optional(),
55304
- backgroundGradient: z65.boolean().optional(),
55305
- spacing: z65.union([z65.array(z65.enum(["compact", "default", "spacious"])), z65.boolean()]).optional(),
55306
- textColor: z65.boolean().optional()
55565
+ var sdkSectionOptionsConfigSchema = z66.object({
55566
+ backgroundColor: z66.boolean().optional(),
55567
+ backgroundImage: z66.boolean().optional(),
55568
+ backgroundGradient: z66.boolean().optional(),
55569
+ spacing: z66.union([z66.array(z66.enum(["compact", "default", "spacious"])), z66.boolean()]).optional(),
55570
+ textColor: z66.boolean().optional()
55307
55571
  });
55308
- var sdkContainerOptionsConfigSchema = z65.object({
55309
- maxWidth: z65.union([z65.array(z65.enum(["narrow", "default", "wide", "full"])), z65.boolean()]).optional(),
55310
- alignment: z65.union([z65.array(z65.enum(["left", "center", "right"])), z65.boolean()]).optional()
55572
+ var sdkContainerOptionsConfigSchema = z66.object({
55573
+ maxWidth: z66.union([z66.array(z66.enum(["narrow", "default", "wide", "full"])), z66.boolean()]).optional(),
55574
+ alignment: z66.union([z66.array(z66.enum(["left", "center", "right"])), z66.boolean()]).optional()
55311
55575
  });
55312
- var sdkSiteStyleConfigSchema = z65.object({
55313
- sectionBackgrounds: z65.array(sdkSectionBackgroundSchema).optional(),
55576
+ var sdkSiteStyleConfigSchema = z66.object({
55577
+ sectionBackgrounds: z66.array(sdkSectionBackgroundSchema).optional(),
55314
55578
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
55315
55579
  containerOptions: sdkContainerOptionsConfigSchema.optional()
55316
55580
  });
55317
- var sdkSiteLayoutConfigSchema = z65.object({
55318
- footerBlocks: z65.array(
55319
- z65.object({
55320
- id: z65.string().min(1).optional(),
55321
- kind: z65.string().min(1),
55322
- content: z65.record(z65.string(), z65.unknown()).optional()
55581
+ var sdkSiteLayoutConfigSchema = z66.object({
55582
+ footerBlocks: z66.array(
55583
+ z66.object({
55584
+ id: z66.string().min(1).optional(),
55585
+ kind: z66.string().min(1),
55586
+ content: z66.record(z66.string(), z66.unknown()).optional()
55323
55587
  })
55324
55588
  ).optional()
55325
55589
  });
55326
- var sdkFieldSelectOptionSchema = z65.object({
55327
- value: z65.string(),
55328
- label: z65.string()
55590
+ var sdkFieldSelectOptionSchema = z66.object({
55591
+ value: z66.string(),
55592
+ label: z66.string()
55329
55593
  });
55330
- var sdkBlockFieldConfigSchema = z65.object({
55331
- options: z65.array(sdkFieldSelectOptionSchema).optional()
55594
+ var sdkBlockFieldConfigSchema = z66.object({
55595
+ options: z66.array(sdkFieldSelectOptionSchema).optional()
55332
55596
  });
55333
- var sdkBlockFieldOptionsMapSchema = z65.record(
55334
- z65.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
55597
+ var sdkBlockFieldOptionsMapSchema = z66.record(
55598
+ z66.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
55335
55599
  message: "Block ID must be 'block.*' or 'custom.*' format"
55336
55600
  }),
55337
- z65.record(z65.string().min(1), sdkBlockFieldConfigSchema)
55601
+ z66.record(z66.string().min(1), sdkBlockFieldConfigSchema)
55338
55602
  ).optional();
55339
- var sdkContentTypeTemplateConfigSchema = z65.object({
55340
- blocks: z65.array(z65.unknown())
55603
+ var sdkContentTypeTemplateConfigSchema = z66.object({
55604
+ blocks: z66.array(z66.unknown())
55341
55605
  }).passthrough();
55342
- var sdkContentTypeConfigSchema = z65.object({
55343
- key: z65.string().min(1),
55344
- fields: z65.array(z65.unknown()),
55606
+ var sdkContentTypeConfigSchema = z66.object({
55607
+ key: z66.string().min(1),
55608
+ fields: z66.array(z66.unknown()),
55345
55609
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
55346
55610
  }).passthrough();
55347
- var sdkContentConfigSchema = z65.object({
55348
- contentTypes: z65.array(sdkContentTypeConfigSchema).optional(),
55349
- pages: z65.array(z65.unknown()).optional(),
55350
- entries: z65.array(z65.unknown()).optional(),
55351
- navigationMenus: z65.array(z65.unknown()).optional(),
55352
- settings: z65.unknown().optional()
55611
+ var sdkContentConfigSchema = z66.object({
55612
+ contentTypes: z66.array(sdkContentTypeConfigSchema).optional(),
55613
+ pages: z66.array(z66.unknown()).optional(),
55614
+ entries: z66.array(z66.unknown()).optional(),
55615
+ navigationMenus: z66.array(z66.unknown()).optional(),
55616
+ settings: z66.unknown().optional()
55353
55617
  }).passthrough();
55354
55618
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
55355
55619
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -55357,46 +55621,69 @@ var SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH = 500;
55357
55621
  var SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH = 120;
55358
55622
  var SDK_WORKFLOW_ENDPOINT_MAX_LENGTH = 500;
55359
55623
  var SDK_WORKFLOW_TRIGGER_MAX_COUNT = 5;
55624
+ var SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH = 120;
55625
+ var SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT = 10;
55360
55626
  var SDK_WORKFLOW_MAX_COUNT = 50;
55361
55627
  var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
55362
55628
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
55363
55629
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
55364
55630
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
55365
- var sdkWorkflowIdSchema = z65.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
55631
+ var sdkWorkflowIdSchema = z66.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
55366
55632
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
55367
55633
  });
55368
- 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 "/"' });
55369
- var sdkWorkflowManualTriggerSchema = z65.object({
55370
- type: z65.literal("manual")
55634
+ 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 "/"' });
55635
+ var sdkWorkflowManualTriggerSchema = z66.object({
55636
+ type: z66.literal("manual")
55637
+ }).strict();
55638
+ var sdkWorkflowTriggerFieldSchema = z66.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
55639
+ message: "Workflow trigger fields must be top-level content field IDs, not paths"
55640
+ });
55641
+ var sdkWorkflowFieldChangedConditionSchema = z66.object({
55642
+ field: sdkWorkflowTriggerFieldSchema,
55643
+ changed: z66.literal(true)
55371
55644
  }).strict();
55372
- var sdkWorkflowTriggerSchema = z65.discriminatedUnion("type", [
55373
- sdkWorkflowManualTriggerSchema
55645
+ var sdkWorkflowFieldEmptyConditionSchema = z66.object({
55646
+ field: sdkWorkflowTriggerFieldSchema,
55647
+ isEmpty: z66.boolean()
55648
+ }).strict();
55649
+ var sdkWorkflowEntryDraftUpdatedTriggerSchema = z66.object({
55650
+ type: z66.literal("entry.draft.updated"),
55651
+ when: z66.array(
55652
+ z66.union([
55653
+ sdkWorkflowFieldChangedConditionSchema,
55654
+ sdkWorkflowFieldEmptyConditionSchema
55655
+ ])
55656
+ ).min(1).max(SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT)
55657
+ }).strict();
55658
+ var sdkWorkflowTriggerSchema = z66.discriminatedUnion("type", [
55659
+ sdkWorkflowManualTriggerSchema,
55660
+ sdkWorkflowEntryDraftUpdatedTriggerSchema
55374
55661
  ]);
55375
- var sdkWorkflowConfirmationSchema = z65.object({
55376
- title: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
55377
- body: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
55662
+ var sdkWorkflowConfirmationSchema = z66.object({
55663
+ title: z66.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
55664
+ body: z66.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
55378
55665
  }).strict();
55379
- var sdkWorkflowConfigSchema = z65.object({
55666
+ var sdkWorkflowConfigSchema = z66.object({
55380
55667
  id: sdkWorkflowIdSchema,
55381
- title: z65.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
55382
- description: z65.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
55383
- contentType: z65.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
55668
+ title: z66.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
55669
+ description: z66.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
55670
+ contentType: z66.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
55384
55671
  endpoint: sdkWorkflowEndpointSchema,
55385
- triggers: z65.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
55672
+ triggers: z66.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
55386
55673
  confirmation: sdkWorkflowConfirmationSchema.optional()
55387
55674
  }).strict();
55388
- var sdkWorkflowsSchema = z65.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
55675
+ var sdkWorkflowsSchema = z66.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
55389
55676
  const ids = workflows.map((workflow) => workflow.id);
55390
55677
  return ids.length === new Set(ids).size;
55391
55678
  }, { message: "Workflow IDs must be unique" }).optional();
55392
- var riverbankSiteConfigInputSchema = z65.object({
55393
- siteId: z65.string().uuid(),
55394
- previewUrl: z65.string().url().optional(),
55395
- liveUrl: z65.string().url().optional(),
55679
+ var riverbankSiteConfigInputSchema = z66.object({
55680
+ siteId: z66.string().uuid(),
55681
+ previewUrl: z66.string().url().optional(),
55682
+ liveUrl: z66.string().url().optional(),
55396
55683
  theme: sdkThemeConfigSchema.optional(),
55397
55684
  styles: sdkSiteStyleConfigSchema.optional(),
55398
55685
  layout: sdkSiteLayoutConfigSchema.optional(),
55399
- customBlocks: z65.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
55686
+ customBlocks: z66.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
55400
55687
  const ids = blocks.map((b) => b.id);
55401
55688
  return ids.length === new Set(ids).size;
55402
55689
  }, { message: "Block IDs must be unique" }).optional(),
@@ -55404,48 +55691,51 @@ var riverbankSiteConfigInputSchema = z65.object({
55404
55691
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
55405
55692
  workflows: sdkWorkflowsSchema,
55406
55693
  content: sdkContentConfigSchema.optional(),
55407
- contentDir: z65.string().optional(),
55408
- sync: z65.object({
55409
- existingEntries: z65.enum(["skip", "update"]).optional()
55694
+ contentDir: z66.string().optional(),
55695
+ sync: z66.object({
55696
+ existingEntries: z66.enum(["skip", "update"]).optional()
55410
55697
  }).optional(),
55411
- deploy: z65.object({
55412
- verifyCommand: z65.string().optional(),
55413
- prebuildOutput: z65.string().optional()
55698
+ deploy: z66.object({
55699
+ verifyCommand: z66.string().optional(),
55700
+ prebuildOutput: z66.string().optional()
55414
55701
  }).optional(),
55415
- themeSource: z65.enum(["local", "cms"]).optional(),
55416
- activeTheme: z65.string().optional(),
55417
- enablePortal: z65.boolean().optional(),
55702
+ themeSource: z66.enum(["local", "cms"]).optional(),
55703
+ activeTheme: z66.string().optional(),
55704
+ enablePortal: z66.boolean().optional(),
55418
55705
  dashboard: dashboardConfigSchema.optional()
55419
55706
  }).strict();
55420
- var pushSdkConfigBodySchema = z65.object({
55707
+ var pushSdkConfigBodySchema = z66.object({
55421
55708
  config: riverbankSiteConfigInputSchema,
55422
- forceContentTypes: z65.boolean().optional()
55709
+ forceContentTypes: z66.boolean().optional()
55423
55710
  }).strict();
55424
55711
 
55425
55712
  // ../api/src/siteOnboarding.ts
55426
- import { z as z66 } from "zod";
55713
+ import { z as z67 } from "zod";
55427
55714
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
55428
55715
  configure_appointments: {
55429
55716
  requirementId: "configure_appointments",
55430
55717
  reason: "launch_anyway"
55431
55718
  }
55432
55719
  };
55433
- var acknowledgeLaunchRequirementRequestSchema = z66.discriminatedUnion(
55720
+ var acknowledgeLaunchRequirementRequestSchema = z67.discriminatedUnion(
55434
55721
  "requirementId",
55435
55722
  [
55436
- z66.object({
55437
- requirementId: z66.literal("review_generated_site")
55723
+ z67.object({
55724
+ requirementId: z67.literal("review_generated_site")
55438
55725
  }),
55439
- z66.object({
55440
- requirementId: z66.literal(
55726
+ z67.object({
55727
+ requirementId: z67.literal(
55441
55728
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
55442
55729
  ),
55443
- overrideReason: z66.literal(
55730
+ overrideReason: z67.literal(
55444
55731
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
55445
55732
  )
55446
55733
  })
55447
55734
  ]
55448
55735
  );
55736
+ var goLiveSiteRequestSchema = z67.object({
55737
+ acceptExtraSiteCharge: z67.boolean().optional()
55738
+ });
55449
55739
 
55450
55740
  // ../surfaces/src/index.ts
55451
55741
  var SURFACE_IDS = ["core", "macadamia"];
@@ -55625,79 +55915,94 @@ function isRecord4(value) {
55625
55915
  }
55626
55916
 
55627
55917
  // ../api/src/appointmentSetup.ts
55628
- import { z as z67 } from "zod";
55629
- var appointmentSetupRefSchema = z67.discriminatedUnion("kind", [
55630
- z67.object({ kind: z67.literal("existing"), id: z67.string().min(1) }),
55631
- z67.object({ kind: z67.literal("new"), draftId: z67.string().min(1) })
55918
+ import { z as z68 } from "zod";
55919
+ var appointmentSetupRefSchema = z68.discriminatedUnion("kind", [
55920
+ z68.object({ kind: z68.literal("existing"), id: z68.string().min(1) }),
55921
+ z68.object({ kind: z68.literal("new"), draftId: z68.string().min(1) })
55632
55922
  ]);
55633
- var appointmentSetupVenueChoiceSchema = z67.discriminatedUnion("kind", [
55634
- z67.object({ kind: z67.literal("none") }),
55635
- z67.object({ kind: z67.literal("existing"), venueId: z67.string().min(1) }),
55636
- z67.object({
55637
- kind: z67.literal("create"),
55638
- draftId: z67.string().min(1),
55639
- title: z67.string().trim().min(1),
55640
- description: z67.string().nullable(),
55641
- timezone: z67.string().trim().min(1).nullable(),
55642
- addressJson: z67.record(z67.string(), z67.unknown()),
55643
- locationJson: z67.object({ lat: z67.number(), lng: z67.number() }).nullable()
55923
+ var appointmentSetupVenueChoiceSchema = z68.discriminatedUnion("kind", [
55924
+ z68.object({ kind: z68.literal("none") }),
55925
+ z68.object({ kind: z68.literal("existing"), venueId: z68.string().min(1) }),
55926
+ z68.object({
55927
+ kind: z68.literal("create"),
55928
+ draftId: z68.string().min(1),
55929
+ title: z68.string().trim().min(1),
55930
+ description: z68.string().nullable(),
55931
+ timezone: z68.string().trim().min(1).nullable(),
55932
+ addressJson: z68.record(z68.string(), z68.unknown()),
55933
+ locationJson: z68.object({ lat: z68.number(), lng: z68.number() }).nullable()
55644
55934
  })
55645
55935
  ]);
55646
- var appointmentSetupPaymentDraftSchema = z67.object({
55647
- priceType: z67.union([z67.literal("free"), z67.literal("paid")])
55648
- });
55649
- var appointmentSetupServiceAssignmentDraftSchema = z67.discriminatedUnion("kind", [
55650
- z67.object({ kind: z67.literal("all_practitioners") }),
55651
- z67.object({
55652
- kind: z67.literal("selected_practitioners"),
55653
- resourceRefs: z67.array(appointmentSetupRefSchema)
55936
+ var appointmentSetupPaymentDraftSchema = z68.object({
55937
+ priceType: z68.union([z68.literal("free"), z68.literal("paid")])
55938
+ });
55939
+ var appointmentSetupServiceAssignmentDraftSchema = z68.discriminatedUnion("kind", [
55940
+ z68.object({ kind: z68.literal("all_practitioners") }),
55941
+ z68.object({
55942
+ kind: z68.literal("selected_practitioners"),
55943
+ resourceRefs: z68.array(appointmentSetupRefSchema)
55654
55944
  })
55655
55945
  ]);
55656
- var appointmentSetupServiceDraftSchema = z67.object({
55946
+ var appointmentSetupServiceDraftSchema = z68.object({
55657
55947
  ref: appointmentSetupRefSchema,
55658
- title: z67.string().trim().min(1),
55659
- description: z67.string().nullable(),
55660
- durationMinutes: z67.number().int().positive(),
55661
- priceAmount: z67.number().int().nonnegative().nullable(),
55662
- isActive: z67.boolean(),
55663
- locationType: z67.union([
55664
- z67.literal("virtual"),
55665
- z67.literal("in_person"),
55666
- z67.literal("hybrid")
55948
+ title: z68.string().trim().min(1),
55949
+ description: z68.string().nullable(),
55950
+ durationMinutes: z68.number().int().positive(),
55951
+ priceAmount: z68.number().int().nonnegative().nullable(),
55952
+ isActive: z68.boolean(),
55953
+ locationType: z68.union([
55954
+ z68.literal("virtual"),
55955
+ z68.literal("in_person"),
55956
+ z68.literal("hybrid")
55667
55957
  ]),
55668
55958
  venue: appointmentSetupVenueChoiceSchema,
55669
- timezone: z67.string().trim().min(1).nullable(),
55959
+ timezone: z68.string().trim().min(1).nullable(),
55670
55960
  payment: appointmentSetupPaymentDraftSchema,
55671
55961
  assignment: appointmentSetupServiceAssignmentDraftSchema
55962
+ }).superRefine((service, ctx) => {
55963
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
55964
+ ctx.addIssue({
55965
+ code: "custom",
55966
+ path: ["priceAmount"],
55967
+ message: "Paid appointment services need a positive price."
55968
+ });
55969
+ }
55970
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
55971
+ ctx.addIssue({
55972
+ code: "custom",
55973
+ path: ["priceAmount"],
55974
+ message: "Free appointment services cannot carry a positive price."
55975
+ });
55976
+ }
55672
55977
  });
55673
- var appointmentSetupPractitionerDraftSchema = z67.object({
55978
+ var appointmentSetupPractitionerDraftSchema = z68.object({
55674
55979
  ref: appointmentSetupRefSchema,
55675
- displayName: z67.string().trim().min(1),
55676
- bio: z67.string().nullable(),
55677
- timezone: z67.string().trim().min(1),
55678
- colorHex: z67.string().nullable()
55679
- });
55680
- var appointmentSetupWeeklyWindowDraftSchema = z67.object({
55681
- weekday: z67.number().int().min(0).max(6),
55682
- startTime: z67.string(),
55683
- endTime: z67.string()
55684
- });
55685
- var appointmentSetupAvailabilityDraftSchema = z67.object({
55686
- kind: z67.literal("weekly_windows"),
55980
+ displayName: z68.string().trim().min(1),
55981
+ bio: z68.string().nullable(),
55982
+ timezone: z68.string().trim().min(1),
55983
+ colorHex: z68.string().nullable()
55984
+ });
55985
+ var appointmentSetupWeeklyWindowDraftSchema = z68.object({
55986
+ weekday: z68.number().int().min(0).max(6),
55987
+ startTime: z68.string(),
55988
+ endTime: z68.string()
55989
+ });
55990
+ var appointmentSetupAvailabilityDraftSchema = z68.object({
55991
+ kind: z68.literal("weekly_windows"),
55687
55992
  resourceRef: appointmentSetupRefSchema,
55688
55993
  serviceRef: appointmentSetupRefSchema.nullable(),
55689
- windows: z67.array(appointmentSetupWeeklyWindowDraftSchema)
55994
+ windows: z68.array(appointmentSetupWeeklyWindowDraftSchema)
55690
55995
  });
55691
55996
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
55692
55997
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
55693
- var appointmentSetupBookingNoticeSchema = z67.object({
55694
- minLeadMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
55695
- maxBookingNoticeMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
55696
- });
55697
- var applyAppointmentSetupRequestSchema = z67.object({
55698
- services: z67.array(appointmentSetupServiceDraftSchema),
55699
- practitioners: z67.array(appointmentSetupPractitionerDraftSchema),
55700
- availability: z67.array(appointmentSetupAvailabilityDraftSchema),
55998
+ var appointmentSetupBookingNoticeSchema = z68.object({
55999
+ minLeadMinutes: z68.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
56000
+ maxBookingNoticeMinutes: z68.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
56001
+ });
56002
+ var applyAppointmentSetupRequestSchema = z68.object({
56003
+ services: z68.array(appointmentSetupServiceDraftSchema),
56004
+ practitioners: z68.array(appointmentSetupPractitionerDraftSchema),
56005
+ availability: z68.array(appointmentSetupAvailabilityDraftSchema),
55701
56006
  bookingNotice: appointmentSetupBookingNoticeSchema
55702
56007
  });
55703
56008
 
@@ -55730,24 +56035,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
55730
56035
  ];
55731
56036
 
55732
56037
  // ../api/src/siteBanner.ts
55733
- import { z as z68 } from "zod";
56038
+ import { z as z69 } from "zod";
55734
56039
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
55735
56040
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
55736
56041
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
55737
56042
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
55738
- var siteBannerScopeSchema = z68.enum(SITE_BANNER_SCOPE_VALUES);
55739
- var siteBannerToneSchema = z68.enum(SITE_BANNER_TONE_VALUES);
55740
- var siteBannerBodySchema = z68.unknown().transform(unwrapRichTextValue);
55741
- var siteBannerCtaSchema = z68.object({
55742
- label: z68.string().trim().min(1),
56043
+ var siteBannerScopeSchema = z69.enum(SITE_BANNER_SCOPE_VALUES);
56044
+ var siteBannerToneSchema = z69.enum(SITE_BANNER_TONE_VALUES);
56045
+ var siteBannerBodySchema = z69.unknown().transform(unwrapRichTextValue);
56046
+ var siteBannerCtaSchema = z69.object({
56047
+ label: z69.string().trim().min(1),
55743
56048
  link: linkPayloadSchema
55744
56049
  });
55745
- var siteBannerSettingsSchema = z68.discriminatedUnion("enabled", [
55746
- z68.object({
55747
- enabled: z68.literal(false)
56050
+ var siteBannerSettingsSchema = z69.discriminatedUnion("enabled", [
56051
+ z69.object({
56052
+ enabled: z69.literal(false)
55748
56053
  }),
55749
- z68.object({
55750
- enabled: z68.literal(true),
56054
+ z69.object({
56055
+ enabled: z69.literal(true),
55751
56056
  scope: siteBannerScopeSchema,
55752
56057
  tone: siteBannerToneSchema,
55753
56058
  body: siteBannerBodySchema,
@@ -55761,7 +56066,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
55761
56066
  const analysis = analyzeSiteBannerBody(value.body);
55762
56067
  for (const issue2 of analysis.issues) {
55763
56068
  ctx.addIssue({
55764
- code: z68.ZodIssueCode.custom,
56069
+ code: z69.ZodIssueCode.custom,
55765
56070
  path: ["body"],
55766
56071
  message: siteBannerBodyIssueMessage(issue2)
55767
56072
  });
@@ -55985,71 +56290,71 @@ function parsePublicProductCategorySelector(value) {
55985
56290
  }
55986
56291
 
55987
56292
  // ../api/src/aiPlayground.ts
55988
- import { z as z69 } from "zod";
55989
- var Rfc6902PatchOp = z69.discriminatedUnion("op", [
56293
+ import { z as z70 } from "zod";
56294
+ var Rfc6902PatchOp = z70.discriminatedUnion("op", [
55990
56295
  // Standard RFC-6902 operations
55991
- z69.object({
55992
- op: z69.literal("add"),
55993
- path: z69.string(),
55994
- value: z69.unknown()
56296
+ z70.object({
56297
+ op: z70.literal("add"),
56298
+ path: z70.string(),
56299
+ value: z70.unknown()
55995
56300
  }),
55996
- z69.object({
55997
- op: z69.literal("remove"),
55998
- path: z69.string()
56301
+ z70.object({
56302
+ op: z70.literal("remove"),
56303
+ path: z70.string()
55999
56304
  }),
56000
- z69.object({
56001
- op: z69.literal("replace"),
56002
- path: z69.string(),
56003
- value: z69.unknown()
56305
+ z70.object({
56306
+ op: z70.literal("replace"),
56307
+ path: z70.string(),
56308
+ value: z70.unknown()
56004
56309
  }),
56005
- z69.object({
56006
- op: z69.literal("move"),
56007
- from: z69.string(),
56008
- path: z69.string()
56310
+ z70.object({
56311
+ op: z70.literal("move"),
56312
+ from: z70.string(),
56313
+ path: z70.string()
56009
56314
  }),
56010
- z69.object({
56011
- op: z69.literal("copy"),
56012
- from: z69.string(),
56013
- path: z69.string()
56315
+ z70.object({
56316
+ op: z70.literal("copy"),
56317
+ from: z70.string(),
56318
+ path: z70.string()
56014
56319
  }),
56015
56320
  // Block-level operations (Phase 2)
56016
- z69.object({
56017
- op: z69.literal("add_block"),
56018
- blockKind: z69.string(),
56019
- afterBlockId: z69.string().nullable(),
56020
- content: z69.record(z69.string(), z69.unknown()),
56021
- rationale: z69.string()
56321
+ z70.object({
56322
+ op: z70.literal("add_block"),
56323
+ blockKind: z70.string(),
56324
+ afterBlockId: z70.string().nullable(),
56325
+ content: z70.record(z70.string(), z70.unknown()),
56326
+ rationale: z70.string()
56022
56327
  }),
56023
- z69.object({
56024
- op: z69.literal("delete_block"),
56025
- blockId: z69.string(),
56026
- rationale: z69.string()
56328
+ z70.object({
56329
+ op: z70.literal("delete_block"),
56330
+ blockId: z70.string(),
56331
+ rationale: z70.string()
56027
56332
  }),
56028
- z69.object({
56029
- op: z69.literal("reorder_block"),
56030
- blockId: z69.string(),
56031
- afterBlockId: z69.string().nullable(),
56032
- rationale: z69.string()
56333
+ z70.object({
56334
+ op: z70.literal("reorder_block"),
56335
+ blockId: z70.string(),
56336
+ afterBlockId: z70.string().nullable(),
56337
+ rationale: z70.string()
56033
56338
  })
56034
56339
  ]);
56035
- var PlaygroundProposeRequest = z69.object({
56036
- request: z69.string().min(1).max(2e3)
56340
+ var PlaygroundProposeRequest = z70.object({
56341
+ request: z70.string().min(1).max(2e3)
56037
56342
  });
56038
- var MultiPagePatchEnvelope = z69.object({
56039
- pageId: z69.string(),
56040
- blockId: z69.string().optional(),
56343
+ var MultiPagePatchEnvelope = z70.object({
56344
+ pageId: z70.string(),
56345
+ blockId: z70.string().optional(),
56041
56346
  // Not present for page-level ops
56042
- blockKind: z69.string().optional(),
56043
- blockPurpose: z69.string().optional().nullable(),
56044
- ops: z69.array(Rfc6902PatchOp),
56045
- rationale: z69.string(),
56046
- currentContent: z69.record(z69.string(), z69.unknown()).optional()
56047
- });
56048
- var MultiPageUpdateResponse = z69.object({
56049
- patches: z69.array(MultiPagePatchEnvelope),
56050
- assistantMessage: z69.string(),
56051
- pagesModified: z69.number(),
56052
- toolCallsUsed: z69.number()
56347
+ blockKind: z70.string().optional(),
56348
+ blockPurpose: z70.string().optional().nullable(),
56349
+ ops: z70.array(Rfc6902PatchOp),
56350
+ rationale: z70.string(),
56351
+ currentContent: z70.record(z70.string(), z70.unknown()).optional()
56352
+ });
56353
+ var MultiPageUpdateResponse = z70.object({
56354
+ patches: z70.array(MultiPagePatchEnvelope),
56355
+ assistantMessage: z70.string(),
56356
+ pagesModified: z70.number(),
56357
+ toolCallsUsed: z70.number()
56053
56358
  });
56054
56359
 
56055
56360
  // src/data/prefetchBlockData.ts