@riverbankcms/sdk 0.108.0 → 0.111.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 (278) hide show
  1. package/README.md +21 -1
  2. package/dist/{PreviewEditorSidebar-BBT-kZAM.mjs → PreviewEditorSidebar-CTR6LUhN.mjs} +181 -135
  3. package/dist/{PreviewEditorUI-D69xNKT2.mjs → PreviewEditorUI-DZg15Zip.mjs} +3 -4
  4. package/dist/{PreviewQueryProvider-RRu7wyQ5.mjs → PreviewQueryProvider-kkmjklLG.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CuDjXH6o.mjs → SdkPreviewModeRuntime-DeOTAFvR.mjs} +436 -367
  6. package/dist/{SiteChromeCustomizeContext-BQUY2dEk.mjs → SiteChromeCustomizeContext-DOSDLCiJ.mjs} +3442 -3029
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +12633 -10490
  8. package/dist/_dts/api/src/bookingAdjustments.d.ts +5 -0
  9. package/dist/_dts/api/src/bookingOperations.d.ts +4 -0
  10. package/dist/_dts/api/src/bookingRecords.d.ts +2 -17
  11. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +6 -6
  12. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +5 -5
  13. package/dist/_dts/api/src/common/envelope.d.ts +7 -0
  14. package/dist/_dts/api/src/contentRuntime.d.ts +4 -1
  15. package/dist/_dts/api/src/courses.d.ts +31 -15
  16. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +5 -5
  17. package/dist/_dts/api/src/endpoints.d.ts +49 -4
  18. package/dist/_dts/api/src/index.d.ts +3 -3
  19. package/dist/_dts/api/src/participantMessaging.d.ts +18 -12
  20. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  21. package/dist/_dts/api/src/sdkContracts.d.ts +259 -1
  22. package/dist/_dts/api/src/siteInfrastructure.d.ts +13 -0
  23. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +6 -6
  24. package/dist/_dts/api/src/siteOperations.d.ts +11 -19
  25. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +29 -1
  26. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -31
  27. package/dist/_dts/api/src/webhooks.d.ts +98 -1
  28. package/dist/_dts/billing/src/site-arrangements.d.ts +3 -0
  29. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +9 -0
  30. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +3 -4
  31. package/dist/_dts/blocks/src/client/course-registration.d.ts +4 -1
  32. package/dist/_dts/blocks/src/client.d.ts +4 -1
  33. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -8
  34. package/dist/_dts/blocks/src/index.d.ts +4 -2
  35. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +3 -0
  36. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +3 -0
  38. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +3 -23
  39. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +5 -4
  41. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -23
  42. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +2 -1
  43. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -1
  44. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule.d.ts +3 -2
  45. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +2 -1
  46. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +5 -1
  47. package/dist/_dts/blocks/src/system/blocks/form.d.ts +3 -0
  48. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +3 -0
  49. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -0
  50. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +5 -1
  51. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -1
  52. package/dist/_dts/blocks/src/system/blocks/single-button.d.ts +2 -1
  53. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +3 -0
  54. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +3 -0
  56. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +3 -0
  57. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  58. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +35 -0
  59. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +16 -6
  60. package/dist/_dts/blocks/src/system/defineBlock.d.ts +9 -1
  61. package/dist/_dts/blocks/src/system/fields/button.d.ts +10 -21
  62. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +10 -1
  63. package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +9 -5
  64. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +31 -0
  65. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -24
  66. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -12
  67. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +29 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/buttonAffordance.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/ErrorStep.d.ts +2 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/PaymentFailedStep.d.ts +2 -1
  71. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/VerifyingTimeoutStep.d.ts +2 -1
  72. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +21 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.d.ts +4 -4
  74. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/whole-series-registration.headless.contract.d.ts +326 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/whole-series-registration.headless.planning.d.ts +27 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +5 -4
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -2
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +2 -1
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +5 -4
  80. package/dist/_dts/blocks/src/system/runtime/nodes/file-download.d.ts +2 -3
  81. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -4
  83. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +7 -6
  84. package/dist/_dts/blocks/src/system/runtime/nodes/shop.types.d.ts +2 -1
  85. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +2 -1
  86. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +4 -2
  87. package/dist/_dts/content-editor/src/index.d.ts +12 -12
  88. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +17 -2
  89. package/dist/_dts/content-model/src/content-types/entryValidation.d.ts +31 -0
  90. package/dist/_dts/content-model/src/content-types/scaffold.d.ts +58 -0
  91. package/dist/_dts/content-model/src/content-types/sentinels.d.ts +36 -0
  92. package/dist/_dts/content-model/src/index.d.ts +3 -0
  93. package/dist/_dts/core/src/booking-date-time.d.ts +8 -0
  94. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3278 -3196
  95. package/dist/_dts/editor-blocks/src/widgets/button/context.d.ts +3 -2
  96. package/dist/_dts/media-core/src/fileMimeDetection.d.ts +16 -0
  97. package/dist/_dts/media-core/src/fileStorage.d.ts +8 -0
  98. package/dist/_dts/media-core/src/storagePathDomain.d.ts +2 -0
  99. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +3 -0
  100. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +2 -0
  101. package/dist/_dts/preview-next/src/client/index.d.ts +3 -2
  102. package/dist/_dts/preview-next/src/client/preview/ButtonStylePicker.d.ts +16 -0
  103. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -3
  104. package/dist/_dts/preview-next/src/client/preview/PreviewDesignOpenRequestContext.d.ts +7 -0
  105. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +5 -11
  106. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +5 -6
  107. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +6 -7
  108. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +7 -9
  109. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +4 -11
  110. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +8 -7
  111. package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +0 -8
  112. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +1 -11
  113. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +1 -5
  114. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +2 -3
  115. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +3 -4
  116. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -1
  117. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +3 -5
  118. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  119. package/dist/_dts/sdk/src/bookings/types.d.ts +3 -3
  120. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +1 -1
  121. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +1 -1
  122. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +1 -1
  123. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +18 -0
  124. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +15 -0
  125. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +2 -2
  126. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +1 -1
  127. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -0
  128. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +1 -1
  129. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +3 -0
  130. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +12 -1
  131. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +1 -0
  132. package/dist/_dts/sdk/src/cli/commands/style.d.ts +3 -2
  133. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +1 -0
  134. package/dist/_dts/sdk/src/cli/helpers.d.ts +22 -1
  135. package/dist/_dts/sdk/src/cli/index.d.ts +4 -0
  136. package/dist/_dts/sdk/src/cli/output.d.ts +88 -0
  137. package/dist/_dts/sdk/src/cli/program.d.ts +29 -0
  138. package/dist/_dts/sdk/src/cli/push-config.d.ts +1 -1
  139. package/dist/_dts/sdk/src/client/management/catalog.d.ts +10 -0
  140. package/dist/_dts/sdk/src/client/management/http.d.ts +7 -1
  141. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  142. package/dist/_dts/sdk/src/client/management/types.d.ts +45 -20
  143. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +12 -15
  144. package/dist/_dts/sdk/src/date-time/index.d.ts +68 -0
  145. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -1
  146. package/dist/_dts/sdk/src/version.d.ts +1 -1
  147. package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
  148. package/dist/_dts/sdk/src/webhooks/verify.d.ts +3 -3
  149. package/dist/_dts/site-commands/src/commands.d.ts +1010 -817
  150. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  151. package/dist/_dts/theme-core/src/buttons/core.d.ts +15 -46
  152. package/dist/_dts/theme-core/src/buttons/effectClassification.d.ts +147 -0
  153. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +2 -3
  154. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/buttons/index.d.ts +2 -1
  156. package/dist/_dts/theme-core/src/buttons/presets.d.ts +4 -25
  157. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +100 -0
  158. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +16 -0
  159. package/dist/_dts/theme-core/src/buttons/styles/domain.d.ts +80 -0
  160. package/dist/_dts/theme-core/src/buttons/styles/index.d.ts +3 -0
  161. package/dist/_dts/theme-core/src/buttons/styles/recipes/defineStaticButtonStyleRecipe.d.ts +49 -0
  162. package/dist/_dts/theme-core/src/buttons/styles/recipes/quietArrow.d.ts +67 -0
  163. package/dist/_dts/theme-core/src/buttons/styles/recipes/staticRecipes.d.ts +649 -0
  164. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +753 -0
  165. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +69 -0
  166. package/dist/_dts/theme-core/src/buttons/types.d.ts +101 -83
  167. package/dist/_dts/theme-core/src/cards/types.d.ts +16 -16
  168. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  169. package/dist/_dts/theme-core/src/gradients/presets.d.ts +200 -8
  170. package/dist/_dts/theme-core/src/gradients/utils.d.ts +6 -2
  171. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +87 -126
  172. package/dist/_dts/theme-core/src/mock-themes/modern-minimal.d.ts +1 -1
  173. package/dist/_dts/theme-core/src/navigation/types.d.ts +2 -2
  174. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +2 -2
  175. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +5 -8
  176. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -1
  177. package/dist/_dts/theme-core/src/schema.d.ts +112 -138
  178. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  179. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +26 -24
  180. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +10 -10
  181. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +19 -153
  182. package/dist/_dts/theme-core/src/site-styles/headerCtaVariants.d.ts +3 -1
  183. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -2
  184. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +13 -6
  185. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +8 -9
  186. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +33 -12
  187. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +2 -2
  188. package/dist/_dts/ui/src/palette/hex.d.ts +3 -3
  189. package/dist/cli/index.mjs +68396 -67339
  190. package/dist/cli/init-docs/content/cli-reference.md +50 -7
  191. package/dist/cli/init-docs/content/content-management.md +7 -4
  192. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +1 -1
  193. package/dist/cli/init-docs/content/workflow-publish.md +5 -1
  194. package/dist/client/{DiscountCodeDisclosure-D6TOf6Hi.mjs → DiscountCodeDisclosure-C4xvTBux.mjs} +1 -1
  195. package/dist/client/{EventCombined.client-Dao3zxRk.mjs → EventCombined.client-Cr7G131j.mjs} +2 -3
  196. package/dist/client/{EventListing.client-B2NNt4y1.mjs → EventListing.client-CAjbseNy.mjs} +2 -2
  197. package/dist/client/{LeafletStaticMap-BhwFo16w.mjs → LeafletStaticMap-BMlWfwz3.mjs} +1 -1
  198. package/dist/client/{MagicLinkForm-BWnB7cMR.mjs → MagicLinkForm-ChdFz96y.mjs} +1 -2
  199. package/dist/client/{StepIndicator-TzRiQ0BY.mjs → StepIndicator-7D3GaBeM.mjs} +2 -2
  200. package/dist/client/{accordion-BPy-AJ4_.mjs → accordion-D8JTs2Si.mjs} +1 -1
  201. package/dist/client/{bookingForm-BL4PGZds.mjs → bookingForm-H3DCRBHs.mjs} +6 -7
  202. package/dist/client/bookings.mjs +4649 -2767
  203. package/dist/client/{carousel-C2b7Cn9-.mjs → carousel-DMr_QWlz.mjs} +1 -1
  204. package/dist/client/{cart-BQcbXIVD.mjs → cart-DWMbfBdR.mjs} +3 -3
  205. package/dist/client/{checkout-DEmpGRJu.mjs → checkout-zmfdkXLx.mjs} +3 -3
  206. package/dist/client/client.mjs +3195 -2488
  207. package/dist/client/{colorStyles-jZS6KfkP.mjs → colorStyles-gcTh5yZT.mjs} +2 -41
  208. package/dist/client/{colorTokenParts-CMugwvX_.mjs → colorTokenParts-FSS3al6l.mjs} +31 -1
  209. package/dist/client/{courseRegistration-BqRZPmsq.mjs → courseRegistration-Z_mn18jy.mjs} +100 -37
  210. package/dist/client/{eventCalendar-B8N_tSl5.mjs → eventCalendar-CYp0YJGF.mjs} +4 -5
  211. package/dist/client/{eventCombined-Gjn6gtq7.mjs → eventCombined-rKyYZUa9.mjs} +2 -2
  212. package/dist/client/{eventDetails-M-VCxA-r.mjs → eventDetails-X0ZaUuMj.mjs} +3 -3
  213. package/dist/client/{eventListing-DR19hqYi.mjs → eventListing-W1SuL7EP.mjs} +2 -2
  214. package/dist/client/{eventRegistration-BR02a0k3.mjs → eventRegistration-ClWricui.mjs} +6 -7
  215. package/dist/client/{form-LY2xIbwg.mjs → form--eKPwAAD.mjs} +1 -2
  216. package/dist/client/{headerSection-CYwwXJfh.mjs → headerSection-BSeGr-FS.mjs} +2 -3
  217. package/dist/client/hooks.mjs +2169 -2093
  218. package/dist/client/{locationMap-DWnBXrFq.mjs → locationMap-BpOrtNYn.mjs} +8 -5
  219. package/dist/client/{media-DHtSxS5V.mjs → media-DoF0dcVx.mjs} +4 -3
  220. package/dist/client/{newsletterForm-D9s-fQ2P.mjs → newsletterForm-Bt7it7Dy.mjs} +1 -2
  221. package/dist/client/{pricing-DDq80oYc.mjs → pricing-BTjSDDr4.mjs} +1 -1
  222. package/dist/client/{productDetail-B0SbWd45.mjs → productDetail-ICnVTcCg.mjs} +3 -3
  223. package/dist/client/{productList-PwYlZn0y.mjs → productList-ZHr6D604.mjs} +3 -3
  224. package/dist/client/{propsDecoder-BRWBiH7i.mjs → propsDecoder-wWN0tBDF.mjs} +2484 -223
  225. package/dist/client/rendering/client.mjs +2532 -2144
  226. package/dist/client/rendering/islands.mjs +20 -20
  227. package/dist/client/rendering.mjs +3322 -2462
  228. package/dist/client/{shop-CMwZPYME.mjs → shop-C1u_BUn0.mjs} +5 -6
  229. package/dist/client/{shop-commerce-BuxsFate.mjs → shop-commerce-CleZdRha.mjs} +5 -6
  230. package/dist/client/{shop-commerce-store-boYlEJ91.mjs → shop-commerce-store-ycnoB2Ce.mjs} +1 -1
  231. package/dist/client/{shopShared-D2naaOes.mjs → shopShared-CPhByt2a.mjs} +3 -3
  232. package/dist/client/{useDiscountCodeUi-D9RHpVoj.mjs → useDiscountCodeUi-cStSQI6C.mjs} +1 -1
  233. package/dist/client/{useEventFilters-igGiK1re.mjs → useEventFilters-DKPN7hSY.mjs} +46 -70
  234. package/dist/client/{usePolling-CI7MbsFB.mjs → usePolling-BKAd6pkZ.mjs} +2 -2
  235. package/dist/preview-next/before-render.mjs +72 -6
  236. package/dist/preview-next/client/runtime.mjs +4 -4
  237. package/dist/preview-next/middleware.mjs +72 -6
  238. package/dist/{previewAuthStore-a_cBD28m.mjs → previewAuthStore-BkT1D06A.mjs} +72 -6
  239. package/dist/{sdk-runtime-MBzD-GmP.mjs → sdk-runtime-hu3wr3ng.mjs} +2 -2
  240. package/dist/{separator-5ahRBC85.mjs → separator-Bln8izQ9.mjs} +1 -1
  241. package/dist/server/components.mjs +3123 -2391
  242. package/dist/server/config-validation.mjs +2169 -2093
  243. package/dist/server/config.mjs +2169 -2093
  244. package/dist/server/data.mjs +2169 -2093
  245. package/dist/server/date-time.mjs +386 -0
  246. package/dist/server/index.mjs +73 -7
  247. package/dist/server/next/revalidate.mjs +53 -1
  248. package/dist/server/next.mjs +3195 -2397
  249. package/dist/server/page-converter.mjs +2192 -1945
  250. package/dist/server/prebuild.mjs +1 -1
  251. package/dist/server/rendering/server.mjs +2844 -2325
  252. package/dist/server/rendering.mjs +3123 -2391
  253. package/dist/server/routing.mjs +2269 -2149
  254. package/dist/server/server.mjs +2244 -2102
  255. package/dist/server/theme-bridge.mjs +2720 -1887
  256. package/dist/server/theme.mjs +1669 -1322
  257. package/dist/server/webhooks.mjs +54 -2
  258. package/dist/styles/index.css +5 -0
  259. package/package.json +7 -1
  260. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +0 -16
  261. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +0 -16
  262. package/dist/_dts/theme-core/src/buttons/personalities/earth-pill.d.ts +0 -16
  263. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +0 -16
  264. package/dist/_dts/theme-core/src/buttons/personalities/flat-ink.d.ts +0 -20
  265. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +0 -172
  266. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +0 -16
  267. package/dist/_dts/theme-core/src/buttons/personalities/joy-stamp.d.ts +0 -22
  268. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +0 -16
  269. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +0 -16
  270. package/dist/_dts/theme-core/src/buttons/personalities/quiet-arrow.d.ts +0 -17
  271. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +0 -17
  272. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +0 -16
  273. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +0 -17
  274. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +0 -273
  275. package/dist/_dts/theme-core/src/buttons/presets/types.d.ts +0 -88
  276. package/dist/_dts/theme-core/src/buttons/utils/contrast.d.ts +0 -38
  277. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +0 -57
  278. package/dist/client/buttons-EBjyslaX.mjs +0 -1852
package/README.md CHANGED
@@ -14,6 +14,7 @@ A lightweight TypeScript SDK for consuming Riverbank CMS content in React Server
14
14
  - ✅ **Custom blocks** - Define site-specific blocks with full CMS editing support
15
15
  - ✅ **Content tooling** - Define content type schema in config and sync pages, entries, and navigation through explicit content push scopes
16
16
  - ✅ **Site URLs** - Configure preview and live URLs for dashboard integration
17
+ - ✅ **Timezone-safe dates** - Format event and booking times in an explicit IANA timezone
17
18
 
18
19
  ## Installation
19
20
 
@@ -187,6 +188,13 @@ SDK sites that need bespoke appointment booking UI can use the headless booking
187
188
 
188
189
  SDK sites that need bespoke event registration UI can use the headless event registration runtime from `@riverbankcms/sdk/bookings`. See [`docs/headless-event-registration.md`](./docs/headless-event-registration.md) for the real `blockOverrides` pattern with an `'event-registration'` override, `HeadlessEventRegistrationProvider`, `getEventRegistrationOverrideInput`, and `useHeadlessEventRegistrationFlow`.
189
190
 
191
+ ### Date and time formatting
192
+
193
+ Use `@riverbankcms/sdk/date-time` to render event and booking timestamps in
194
+ their intended timezone, including daylight-saving changes. See
195
+ [`docs/date-time-formatting.md`](./docs/date-time-formatting.md) for the
196
+ formatters, compact event-time defaults, range behavior, and error handling.
197
+
190
198
  ### Server-Side API
191
199
 
192
200
  ```tsx
@@ -1597,6 +1605,14 @@ Token values can be:
1597
1605
  - **CSS variable refs**: `'var(--brand-purple)'` (passed through)
1598
1606
  - **RGB values**: `'109 40 217'` (used directly)
1599
1607
 
1608
+ CSS variable references are suitable for emitted variables, structural block
1609
+ styles, cards, and inputs. Opt-in generated button skins resolve and validate
1610
+ foreground/background contrast while building the runtime, so every token used
1611
+ by `components.buttons` must be a concrete hex or RGB value. When your design
1612
+ system owns brand colours through `var(...)`, leave `components.buttons`
1613
+ disabled and style the button classes in your design-system CSS, or provide
1614
+ concrete button tokens to ThemeBridge.
1615
+
1600
1616
  Canonical tokens win when aliases are also present. Accepted aliases are `text -> foreground`, `mutedText -> mutedForeground`, `white -> primaryForeground`, and `danger -> destructive`.
1601
1617
 
1602
1618
  ### Design Presets
@@ -1688,7 +1704,8 @@ Add custom CSS rules scoped to theme components:
1688
1704
 
1689
1705
  ### Pass-Through to Design Systems
1690
1706
 
1691
- Reference existing CSS variables from your design system:
1707
+ Reference existing CSS variables from your design system when ThemeBridge is
1708
+ not generating button skins:
1692
1709
 
1693
1710
  ```tsx
1694
1711
  <ThemeBridgeProvider
@@ -1699,6 +1716,9 @@ Reference existing CSS variables from your design system:
1699
1716
  background: 'var(--ds-bg)',
1700
1717
  foreground: 'var(--ds-text)',
1701
1718
  },
1719
+ components: {
1720
+ buttons: false,
1721
+ },
1702
1722
  }}
1703
1723
  >
1704
1724
  ```
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { $l as Input, A as deriveStyleConfiguratorCapabilities, Au as DropdownMenuItem, B as previewButtonPersonality, Bd as X$1, Ca as curatedPalettes, Ct as useEntryController, D as committedPaletteForSnapshot, Da as paletteColorsEqual, Dt as useEditorUiStoreInstance, Du as Surface, E as cancelPreview, Ea as paletteColorEntries, Et as useEditorUiStore, F as markApplySaving, G as previewSitePalette, Gl as SelectTrigger, H as previewFooterLook, Hl as Select, Ht as resolvePageRouteSlug, I as openRow, If as Check, J as resetTypographyToSaved, K as previewSiteStyle, Kd as Tablet, Kl as SelectValue, L as paletteMutationCapability, M as isPreviewingChange, Mu as DropdownMenuSeparator, N as markApplyFailed, Nf as ChevronRight, Nu as DropdownMenuTrigger, O as createPalette, Oa as paletteColorsSchema, Ou as DropdownMenu, P as markApplySaved, Pf as ChevronLeft, Q as toggleRow, Ql as PopoverTrigger, Qt as FormRenderer, Qu as cn, R as palettePreviewProjection, T as applyTypographyDraftPatch, Ta as buildPaletteLibraryReadModel, Td as assertNever$1, U as previewHeaderLayout, Ui as getCuratedSiteStyle, Ul as SelectContent, Ut as resolveContentTitle, V as previewCuratedPalette, Vi as curatedSiteStyles, Vt as deriveRouteMetadataPresentation, W as previewHeaderStyle, Wl as SelectItem, X as styleConfiguratorHistoryEntryForPersistedSelection, Xd as SlidersHorizontal, Xl as Popover, Y as setPaletteColors, Yd as Smartphone, Yl as SearchInput, Yt as ManifestForm, Yu as Button, Z as syncStyleConfiguratorState, Zl as PopoverContent, Zt as createManifestValidation, _ as planSiteChromeFooterLayoutSelection, _u as CollapsibleContent, af as Monitor, at as createOptimisticActionRunner, bt as useUISelector, c as selectionSnapshotFromApplySiteStyleSelectionResponse, ca as findFooterLook, cf as LoaderCircle, d as PREVIEW_DESIGN_REFRESH_ERROR_MESSAGE, da as getHeaderStyle, dn as listEntryPageContentSlots, en as createStoreBackend, eu as Tabs, f as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, g as cycleableSiteChromeOptions, gu as Collapsible, h as cycleSiteChromeLookId, id as unsafeAsEditorBlockId, j as dismissWarnings, ju as DropdownMenuLabel, k as createStyleConfiguratorState, ku as DropdownMenuContent, l as resolveStyleConfiguratorInitialSnapshot, la as getFooterLayout, m as buildSiteChromeLookModels, n as useSiteChromeCustomizeOptional, nl as buttonPersonalities, nu as TabsList, ot as resolvePreviewSidebarTab, p as reportPreviewDesignError, q as reconcilePaletteLibraryActive, rl as findButtonPersonality, ru as TabsTrigger, s as buildApplySiteStyleSelectionBody, sa as requireEntriesForCuratedChoices, sf as Maximize2, st as FooterComposerPanel, tf as Plus, tu as TabsContent, u as PREVIEW_DESIGN_LOAD_ERROR_MESSAGE, ua as getHeaderLayout, v as planSiteChromeLookSelection, vu as CollapsibleTrigger, w as applyResolvedSelections, wa as findCuratedPalette, x as usePreviewDesignCoordinator, y as planSiteStylePreviewChange, yt as ContentFieldsForm, z as prepareStalePaletteRetry } from "./SiteChromeCustomizeContext-BQUY2dEk.mjs";
3
- import { d as unwrapResponse, f as getDashboardUrl, r as usePreviewAuth } from "./previewAuthStore-a_cBD28m.mjs";
4
- import { C as buildFontPreviewUrl, D as Callout, O as CalloutDescription, S as isAdapterReferenceKind, T as getSiteFontsStorageUrl, _ as usePreviewBlockCustomizeSelectionOptional, b as previewWidgetOverrides, d as buildPreviewDashboardSetupUrl, f as resolvePreviewDashboardSetupHandoff, g as canInspectSiteStyle, h as canApplySiteStyle, m as resolvePreviewSidebarChromeModel, p as resolvePreviewEditorGuidanceModel, v as useBlockCustomizeControls, w as generateFontFaceCss, x as BlockEditor, y as PreviewFormProvider } from "./SdkPreviewModeRuntime-CuDjXH6o.mjs";
5
- import { t as Separator } from "./separator-5ahRBC85.mjs";
6
- import React, { forwardRef, useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
2
+ import { $t as createStoreBackend, A as dismissWarnings, Ad as assertNever$1, B as previewCuratedPalette, Bf as Check, Bi as getCuratedSiteStyle, Bt as deriveRouteMetadataPresentation, C as applyResolvedSelections, Ca as curatedPalettes, Cu as CollapsibleTrigger, D as createPalette, Da as paletteColorsEqual, E as committedPaletteForSnapshot, Ea as paletteColorEntries, Et as useEditorUiStoreInstance, F as openRow, Fu as DropdownMenuItem, G as previewSiteStyle, Gd as X$1, H as previewHeaderLayout, Ht as resolveContentTitle, I as paletteMutationCapability, Iu as DropdownMenuLabel, J as setPaletteColors, Jl as SelectContent, Jt as ManifestForm, K as reconcilePaletteLibraryActive, L as palettePreviewProjection, Lf as ChevronRight, Lu as DropdownMenuSeparator, M as markApplyFailed, Mu as Surface, N as markApplySaved, Nu as DropdownMenu, O as createStyleConfiguratorState, Oa as paletteColorsSchema, P as markApplySaving, Pu as DropdownMenuContent, R as prepareStalePaletteRetry, Rf as ChevronLeft, Ri as curatedSiteStyles, Ru as DropdownMenuTrigger, St as useEntryController, Su as CollapsibleContent, T as cancelPreview, Ta as buildPaletteLibraryReadModel, Tt as useEditorUiStore, U as previewHeaderStyle, V as previewFooterLook, Vt as resolvePageRouteSlug, W as previewSitePalette, X as syncStyleConfiguratorState, Xl as SelectTrigger, Xt as createManifestValidation, Y as styleConfiguratorHistoryEntryForPersistedSelection, Yl as SelectItem, Z as toggleRow, Zd as Tablet, Zl as SelectValue, Zt as FormRenderer, _ as planSiteChromeLookSelection, aa as getHeaderLayout, al as updateButtonStyleSelectionChoice, at as resolvePreviewSidebarTab, au as Tabs, b as usePreviewDesignCoordinator, c as selectionSnapshotFromApplySiteStyleSelectionResponse, cu as TabsTrigger, d as PREVIEW_DESIGN_REFRESH_ERROR_MESSAGE, ed as Button, ef as Smartphone, eu as SearchInput, f as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, ff as Maximize2, g as cycleableSiteChromeOptions, h as cycleSiteChromeLookId, ia as findFooterLook, il as resolveButtonStyleSelection, it as createOptimisticActionRunner, iu as Input, j as isPreviewingChange, k as deriveStyleConfiguratorCapabilities, l as resolveStyleConfiguratorInitialSnapshot, ld as unsafeAsEditorBlockId, m as buildSiteChromeLookModels, n as useSiteChromeCustomizeOptional, nl as buttonStyleSelectionParameterValue, nu as PopoverContent, oa as getHeaderStyle, of as Plus, ol as buttonStyleSelectionKey, ot as FooterComposerPanel, ou as TabsContent, p as reportPreviewDesignError, pf as LoaderCircle, q as resetTypographyToSaved, ql as Select, rd as cn, rl as findButtonStyleRecipe, ru as PopoverTrigger, s as buildApplySiteStyleSelectionBody, su as TabsList, tf as SlidersHorizontal, tu as Popover, u as PREVIEW_DESIGN_LOAD_ERROR_MESSAGE, uf as Monitor, un as listEntryPageContentSlots, v as planSiteStylePreviewChange, vl as themeButtonClassName, vt as ContentFieldsForm, w as applyTypographyDraftPatch, wa as findCuratedPalette, xu as Collapsible, yt as useUISelector, z as previewButtonStyle } from "./SiteChromeCustomizeContext-DOSDLCiJ.mjs";
3
+ import { d as unwrapResponse, f as getDashboardUrl, r as usePreviewAuth } from "./previewAuthStore-BkT1D06A.mjs";
4
+ import { C as generateFontFaceCss, D as Callout, O as CalloutDescription, S as buildFontPreviewUrl, T as ThemeScope, _ as useBlockCustomizeControls, b as BlockEditor, d as resolvePreviewDashboardSetupHandoff, f as resolvePreviewEditorGuidanceModel, g as usePreviewBlockCustomizeSelectionOptional, h as canInspectSiteStyle, m as canApplySiteStyle, p as resolvePreviewSidebarChromeModel, u as buildPreviewDashboardSetupUrl, v as PreviewFormProvider, w as getSiteFontsStorageUrl, x as isAdapterReferenceKind, y as previewWidgetOverrides } from "./SdkPreviewModeRuntime-DeOTAFvR.mjs";
5
+ import { t as Separator } from "./separator-Bln8izQ9.mjs";
6
+ import React, { createContext, forwardRef, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { useQuery, useQueryClient } from "@tanstack/react-query";
9
9
  import { useRouter } from "next/navigation.js";
@@ -1563,13 +1563,27 @@ function formatBlockKindLabel(blockKind) {
1563
1563
  return blockKind.replace(/^block\./, "").replace(/^custom\./, "").replace(/[-_]+/g, " ");
1564
1564
  }
1565
1565
  //#endregion
1566
+ //#region ../preview-next/src/client/preview/PreviewDesignOpenRequestContext.tsx
1567
+ const PreviewDesignOpenRequestContext = createContext(null);
1568
+ function PreviewDesignOpenRequestProvider({ request, children }) {
1569
+ return /* @__PURE__ */ jsx(PreviewDesignOpenRequestContext.Provider, {
1570
+ value: request,
1571
+ children
1572
+ });
1573
+ }
1574
+ function usePreviewDesignOpenRequest() {
1575
+ return useContext(PreviewDesignOpenRequestContext);
1576
+ }
1577
+ //#endregion
1566
1578
  //#region ../preview-next/src/client/preview/PageBlockEditorPanel.tsx
1567
- function PageBlockEditorPanel({ siteId, pageId, dashboardBaseUrl, theme, apiClient, bearerToken, supabaseUrl, blockItems, uiStoreForBlockEditor, blockEditorRef, onBlocksChange, metadataPanel, linkedEntrySection, designPanel, designOpenRequestId = null, designTakeoverActive = false, sdkConfig, mediaAssets, bookingOfferingPresets, viewportMode, viewportWidth, zoom, onViewportModeChange, onViewportWidthChange, onZoomChange }) {
1579
+ function PageBlockEditorPanel({ siteId, pageId, dashboardBaseUrl, theme, apiClient, bearerToken, supabaseUrl, blockItems, uiStoreForBlockEditor, blockEditorRef, onBlocksChange, metadataPanel, linkedEntrySection, designPanel, designTakeoverActive = false, sdkConfig, mediaAssets, bookingOfferingPresets, viewportMode, viewportWidth, zoom, onViewportModeChange, onViewportWidthChange, onZoomChange }) {
1568
1580
  const customizeSelection = usePreviewBlockCustomizeSelectionOptional();
1569
1581
  const [designOpen, setDesignOpen] = useState(false);
1570
1582
  const [customizeOpen, setCustomizeOpen] = useState(false);
1571
1583
  const [contentOpen, setContentOpen] = useState(true);
1572
1584
  const [detailsOpen, setDetailsOpen] = useState(false);
1585
+ const pendingDesignOpenRequest = useUISelector(uiStoreForBlockEditor, (state) => state.previewDesignOpenRequest);
1586
+ const [designOpenRequest, setDesignOpenRequest] = useState(null);
1573
1587
  const designSectionRef = useRef(null);
1574
1588
  const customizeSectionRef = useRef(null);
1575
1589
  const selectionKind = customizeSelection?.selection.kind;
@@ -1598,13 +1612,15 @@ function PageBlockEditorPanel({ siteId, pageId, dashboardBaseUrl, theme, apiClie
1598
1612
  }
1599
1613
  }, [selectionKind, selectionRequestId]);
1600
1614
  useEffect(() => {
1601
- if (designOpenRequestId === null) return;
1615
+ if (!pendingDesignOpenRequest) return;
1616
+ setDesignOpenRequest(pendingDesignOpenRequest);
1602
1617
  setDesignOpen(true);
1603
1618
  designSectionRef.current?.scrollIntoView({
1604
1619
  block: "start",
1605
1620
  behavior: "smooth"
1606
1621
  });
1607
- }, [designOpenRequestId]);
1622
+ uiStoreForBlockEditor.getState().consumePreviewDesignOpenRequest(pendingDesignOpenRequest.requestId);
1623
+ }, [pendingDesignOpenRequest, uiStoreForBlockEditor]);
1608
1624
  return /* @__PURE__ */ jsxs("div", {
1609
1625
  className: "flex h-full min-h-0 flex-col overflow-hidden",
1610
1626
  children: [/* @__PURE__ */ jsx("div", {
@@ -1661,7 +1677,10 @@ function PageBlockEditorPanel({ siteId, pageId, dashboardBaseUrl, theme, apiClie
1661
1677
  className: designTakeoverActive ? "min-h-0 flex-1 data-[state=open]:h-full data-[state=open]:overflow-hidden" : void 0,
1662
1678
  children: /* @__PURE__ */ jsx("div", {
1663
1679
  className: designTakeoverActive ? "h-full min-h-0" : "px-4 pb-4",
1664
- children: designPanel
1680
+ children: /* @__PURE__ */ jsx(PreviewDesignOpenRequestProvider, {
1681
+ request: designOpenRequest,
1682
+ children: designPanel
1683
+ })
1665
1684
  })
1666
1685
  })]
1667
1686
  })
@@ -1794,8 +1813,8 @@ function PreviewEditorGuidanceCard({ guidance, completeSetupDisabled, onComplete
1794
1813
  * Hex colour helpers shared by every palette-editing surface (Macadamia
1795
1814
  * onboarding swatches, the LiveThemeEditor, the Style configurator advanced
1796
1815
  * row). Consolidates three prior duplicates: `normalizeColorPickerValue` in
1797
- * Macadamia, `normalizeHex` + `contrastRatio` in `theme-editor/utils.ts`, and
1798
- * the inline regex in `updateColorRole`.
1816
+ * Macadamia, `normalizeHex` + `contrastRatio` formerly in
1817
+ * `theme-editor/utils.ts`, and the inline regex in `updateColorRole`.
1799
1818
  *
1800
1819
  * Pure functions; no DOM, no React.
1801
1820
  */
@@ -1805,7 +1824,7 @@ function PreviewEditorGuidanceCard({ guidance, completeSetupDisabled, onComplete
1805
1824
  * without a leading `#`; returns `fallback` for any other shape (empty
1806
1825
  * string, garbage, characters outside `[0-9a-f]`, wrong length, etc.). Pass
1807
1826
  * a `fallback` to make the fallback explicit at the call site — defaulting
1808
- * to `'#000000'` keeps the legacy `theme-editor/utils.ts` semantics.
1827
+ * to `'#000000'` preserves the former theme-editor helper semantics.
1809
1828
  */
1810
1829
  function normalizeHex(input, fallback = "#000000") {
1811
1830
  if (!input) return fallback;
@@ -2078,6 +2097,102 @@ function ContrastSwatch({ hex, label }) {
2078
2097
  });
2079
2098
  }
2080
2099
  //#endregion
2100
+ //#region ../preview-next/src/client/preview/ButtonStylePicker.tsx
2101
+ function ButtonStylePicker({ selections, current, previewTheme, onPreview, disabled }) {
2102
+ const recipe = findButtonStyleRecipe(current.styleId);
2103
+ return /* @__PURE__ */ jsxs("div", {
2104
+ className: "space-y-3",
2105
+ children: [/* @__PURE__ */ jsx("div", {
2106
+ role: "radiogroup",
2107
+ "aria-label": "Button style",
2108
+ className: "grid grid-cols-1 gap-2",
2109
+ children: selections.map((selection) => {
2110
+ const optionRecipe = findButtonStyleRecipe(selection.styleId);
2111
+ const selected = selection.styleId === current.styleId;
2112
+ return /* @__PURE__ */ jsxs("label", {
2113
+ className: cn("relative block cursor-pointer rounded-md border p-2 transition has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2", selected ? "border-foreground bg-accent/40 shadow-sm" : "border-border bg-background hover:border-foreground/40 hover:bg-accent/20", disabled && "cursor-not-allowed opacity-60"),
2114
+ children: [
2115
+ /* @__PURE__ */ jsx("input", {
2116
+ type: "radio",
2117
+ name: "button-style",
2118
+ value: selection.styleId,
2119
+ checked: selected,
2120
+ onChange: () => onPreview(selection),
2121
+ disabled,
2122
+ className: "absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed"
2123
+ }),
2124
+ /* @__PURE__ */ jsx("span", {
2125
+ className: "sr-only",
2126
+ children: optionRecipe.accessibilityLabel
2127
+ }),
2128
+ /* @__PURE__ */ jsx(ButtonStylePreviewPair, {
2129
+ selection: selected ? current : selection,
2130
+ previewTheme
2131
+ })
2132
+ ]
2133
+ }, buttonStyleSelectionKey(selection));
2134
+ })
2135
+ }), recipe.controls.map((control) => {
2136
+ const currentValue = buttonStyleSelectionParameterValue(current, control.parameter);
2137
+ return /* @__PURE__ */ jsxs("fieldset", {
2138
+ className: "space-y-2 rounded-md border border-border p-3",
2139
+ disabled,
2140
+ children: [/* @__PURE__ */ jsx("legend", {
2141
+ className: "px-1 text-xs font-medium",
2142
+ children: control.label
2143
+ }), /* @__PURE__ */ jsx("div", {
2144
+ className: "grid grid-cols-2 gap-2",
2145
+ children: control.options.map((option) => /* @__PURE__ */ jsxs("label", {
2146
+ className: cn("relative cursor-pointer rounded-md border px-2 py-1.5 text-center text-xs has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2", currentValue === option.value ? "border-foreground bg-accent/40" : "border-border hover:border-foreground/40"),
2147
+ children: [/* @__PURE__ */ jsx("input", {
2148
+ type: "radio",
2149
+ name: `button-style-${current.styleId}-${control.parameter}`,
2150
+ value: option.value,
2151
+ checked: currentValue === option.value,
2152
+ onChange: () => {
2153
+ const updated = updateButtonStyleSelectionChoice(current, control.parameter, option.value);
2154
+ if (updated.kind === "updated") onPreview(updated.selection);
2155
+ },
2156
+ className: "absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed"
2157
+ }), option.label]
2158
+ }, option.value))
2159
+ })]
2160
+ }, control.parameter);
2161
+ })]
2162
+ });
2163
+ }
2164
+ function ButtonStylePreviewPair({ selection, previewTheme, compact = false }) {
2165
+ const resolved = resolveButtonStyleSelection(selection);
2166
+ if (resolved.kind === "error") return null;
2167
+ return /* @__PURE__ */ jsx(ThemeScope, {
2168
+ theme: {
2169
+ ...previewTheme,
2170
+ buttons: resolved.buttonSystem
2171
+ },
2172
+ themeId: `button-style-preview-${encodeURIComponent(buttonStyleSelectionKey(selection))}`,
2173
+ className: cn("relative overflow-hidden bg-transparent", compact ? "h-7" : "h-11"),
2174
+ children: /* @__PURE__ */ jsxs("span", {
2175
+ className: cn("absolute left-0 top-1/2 flex w-[142%] -translate-y-1/2 origin-left items-center gap-2", compact ? "scale-[0.56]" : "scale-[0.7]"),
2176
+ "aria-hidden": "true",
2177
+ children: [/* @__PURE__ */ jsx("span", {
2178
+ className: themeButtonClassName({
2179
+ variant: "primary",
2180
+ size: "sm",
2181
+ extraClassName: "inline-flex shrink-0 items-center justify-center whitespace-nowrap"
2182
+ }),
2183
+ children: "Get started"
2184
+ }), /* @__PURE__ */ jsx("span", {
2185
+ className: themeButtonClassName({
2186
+ variant: "secondary",
2187
+ size: "sm",
2188
+ extraClassName: "inline-flex shrink-0 items-center justify-center whitespace-nowrap"
2189
+ }),
2190
+ children: "Learn more"
2191
+ })]
2192
+ })
2193
+ });
2194
+ }
2195
+ //#endregion
2081
2196
  //#region ../preview-next/src/client/preview/typographyFontCatalog.ts
2082
2197
  const typographyFontCategories = [
2083
2198
  {
@@ -3092,7 +3207,8 @@ const PALETTE_SURFACE_ROLES = [
3092
3207
  label: "Border"
3093
3208
  }
3094
3209
  ];
3095
- function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVersion = null, selectionUpdatedAt, initialSelections, headerSelectionContext, footerSelectionContext, expandedRowRequest = null, onFocusedSurfaceChange, siteStyleAccess }) {
3210
+ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVersion = null, selectionUpdatedAt, initialSelections, headerSelectionContext, onFocusedSurfaceChange, siteStyleAccess }) {
3211
+ const designOpenRequest = usePreviewDesignOpenRequest();
3096
3212
  const router = useRouter();
3097
3213
  const previewDesign = usePreviewDesignCoordinator();
3098
3214
  const siteChromeCustomize = useSiteChromeCustomizeOptional();
@@ -3106,10 +3222,8 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3106
3222
  selectionVersion: initialSelections.selectionVersion ?? selectionVersion ?? 0,
3107
3223
  selectionUpdatedAt: initialSelections.selectionUpdatedAt ?? selectionUpdatedAt ?? null
3108
3224
  },
3109
- headerSelectionContext,
3110
- footerSelectionContext
3225
+ headerSelectionContext
3111
3226
  }), [
3112
- footerSelectionContext,
3113
3227
  headerSelectionContext,
3114
3228
  theme,
3115
3229
  initialSelections,
@@ -3170,8 +3284,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3170
3284
  siteStyle,
3171
3285
  selection: state.previewed,
3172
3286
  baseTheme: theme,
3173
- headerSelectionContext,
3174
- footerSelectionContext
3287
+ headerSelectionContext
3175
3288
  }).themeOverlay, "site-style");
3176
3289
  }, [
3177
3290
  state,
@@ -3179,7 +3292,6 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3179
3292
  clearPreview,
3180
3293
  previewTheme,
3181
3294
  headerSelectionContext,
3182
- footerSelectionContext,
3183
3295
  theme
3184
3296
  ]);
3185
3297
  useEffect(() => {
@@ -3190,14 +3302,14 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3190
3302
  };
3191
3303
  }, []);
3192
3304
  useEffect(() => {
3193
- if (!expandedRowRequest) return;
3194
- if (appliedExpandedRowRequestIdRef.current === expandedRowRequest.id) return;
3305
+ if (!designOpenRequest) return;
3306
+ if (appliedExpandedRowRequestIdRef.current === designOpenRequest.requestId) return;
3195
3307
  setState((current) => {
3196
3308
  if (!current) return current;
3197
- appliedExpandedRowRequestIdRef.current = expandedRowRequest.id;
3198
- return openRow(current, expandedRowForPreviewDesignRow(expandedRowRequest.row));
3309
+ appliedExpandedRowRequestIdRef.current = designOpenRequest.requestId;
3310
+ return openRow(current, expandedRowForPreviewDesignRow(designOpenRequest.row));
3199
3311
  });
3200
- }, [expandedRowRequest, hasLoadedState]);
3312
+ }, [designOpenRequest, hasLoadedState]);
3201
3313
  const handlePreviewSiteStyle = useCallback((siteStyleId) => {
3202
3314
  setState((current) => {
3203
3315
  if (!current) return current;
@@ -3208,8 +3320,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3208
3320
  siteStyle,
3209
3321
  selection: next.previewed,
3210
3322
  baseTheme: theme,
3211
- headerSelectionContext,
3212
- footerSelectionContext
3323
+ headerSelectionContext
3213
3324
  });
3214
3325
  return applyResolvedSelections(next, {
3215
3326
  resolved: {
@@ -3219,13 +3330,9 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3219
3330
  warnings: result.warnings
3220
3331
  });
3221
3332
  });
3222
- }, [
3223
- footerSelectionContext,
3224
- headerSelectionContext,
3225
- theme
3226
- ]);
3227
- const handlePreviewPersonality = useCallback((id) => {
3228
- setState((current) => current ? previewButtonPersonality(current, id) : current);
3333
+ }, [headerSelectionContext, theme]);
3334
+ const handlePreviewButtonStyle = useCallback((id) => {
3335
+ setState((current) => current ? previewButtonStyle(current, id) : current);
3229
3336
  }, []);
3230
3337
  const handlePreviewHeaderLayout = useCallback((id) => {
3231
3338
  if (!id) return;
@@ -3243,25 +3350,6 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3243
3350
  if (plan.kind !== "footer") return;
3244
3351
  setState((current) => current ? previewFooterLook(current, plan.next.footerLookId) : current);
3245
3352
  }, []);
3246
- const handlePreviewFooterLayout = useCallback((id) => {
3247
- if (!id) return;
3248
- setState((current) => {
3249
- if (!current) return current;
3250
- const siteStyle = getCuratedSiteStyle(current.previewed.siteStyleId);
3251
- if (!siteStyle) return current;
3252
- const models = buildSiteChromeLookModels({
3253
- state: current,
3254
- siteStyle,
3255
- headerSelectionContext,
3256
- footerSelectionContext
3257
- });
3258
- const nextLookId = planSiteChromeFooterLayoutSelection({
3259
- layoutId: id,
3260
- currentLookId: current.previewed.footerLookId ?? models.footer.renderedLookId
3261
- });
3262
- return nextLookId ? previewFooterLook(current, nextLookId) : current;
3263
- });
3264
- }, [footerSelectionContext, headerSelectionContext]);
3265
3353
  const handlePreviewPaletteItem = useCallback((item) => {
3266
3354
  setState((current) => {
3267
3355
  if (!current) return current;
@@ -3289,15 +3377,10 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3289
3377
  siteStyle,
3290
3378
  selection: current.previewed,
3291
3379
  baseTheme: theme,
3292
- headerSelectionContext,
3293
- footerSelectionContext
3380
+ headerSelectionContext
3294
3381
  }).themeOverlay.typography, patch);
3295
3382
  });
3296
- }, [
3297
- footerSelectionContext,
3298
- headerSelectionContext,
3299
- theme
3300
- ]);
3383
+ }, [headerSelectionContext, theme]);
3301
3384
  const handleHeadingTypographyChange = useCallback((patch) => {
3302
3385
  patchTypography({
3303
3386
  kind: "heading",
@@ -3375,15 +3458,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3375
3458
  setState(live);
3376
3459
  }
3377
3460
  const previewed = live.previewed;
3378
- const siteStyle = getCuratedSiteStyle(previewed.siteStyleId);
3379
- if (!siteStyle) return;
3380
- const compiled = planSiteStylePreviewChange({
3381
- siteStyle,
3382
- selection: previewed,
3383
- baseTheme: theme,
3384
- headerSelectionContext,
3385
- footerSelectionContext
3386
- });
3461
+ if (!getCuratedSiteStyle(previewed.siteStyleId)) return;
3387
3462
  await runnerRef.current.run({
3388
3463
  optimistic: () => {
3389
3464
  applyStarted("style-configurator");
@@ -3392,15 +3467,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3392
3467
  network: async () => {
3393
3468
  const body = buildApplySiteStyleSelectionBody({
3394
3469
  base: live.base,
3395
- previewed: {
3396
- ...previewed,
3397
- buttonPersonalityId: compiled.resolvedSelections.buttonPersonalityId,
3398
- headerLayoutId: compiled.resolvedSelections.headerLayoutId,
3399
- headerStyleId: compiled.resolvedSelections.headerStyleId,
3400
- headerLookId: compiled.resolvedSelections.headerLookId,
3401
- footerLookId: compiled.resolvedSelections.footerLookId,
3402
- typography: compiled.themeOverlay.typography
3403
- },
3470
+ previewed,
3404
3471
  selectionId
3405
3472
  });
3406
3473
  if (!body.ok) throw new StyleApplyPlanError(paletteApplyPlanErrorMessage(body.error));
@@ -3432,7 +3499,6 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3432
3499
  });
3433
3500
  }, [
3434
3501
  apiClient,
3435
- footerSelectionContext,
3436
3502
  headerSelectionContext,
3437
3503
  applyFailed,
3438
3504
  applyStarted,
@@ -3458,29 +3524,26 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3458
3524
  className: "text-sm text-muted-foreground",
3459
3525
  children: "This site uses a Site Style that cannot be configured here."
3460
3526
  });
3461
- const currentPersonality = findButtonPersonality(state.previewed.buttonPersonalityId);
3462
3527
  const currentPalette = palettePreviewProjection(state.previewed.palette);
3463
3528
  const paletteMutation = paletteMutationCapability(state);
3464
3529
  const paletteControlsDisabled = saving || !stagedCapabilities.canPreviewStaged || paletteMutation.kind !== "editable";
3465
3530
  const currentCuratedValueKey = currentPalette.kind === "curated" ? currentPalette.valueKey : currentPalette.kind === "curated-fork" ? currentPalette.sourceValueKey : null;
3466
3531
  const currentCuratedPalette = currentCuratedValueKey ? findCuratedPalette(currentCuratedValueKey) : null;
3467
3532
  const paletteIsCustom = currentPalette.kind !== "invalid" && (!currentCuratedPalette || currentPalette.mode !== currentCuratedPalette.mode || !paletteColorsEqual(currentPalette.colors, currentCuratedPalette.colors));
3468
- const currentTypography = planSiteStylePreviewChange({
3533
+ const currentPreviewPlan = planSiteStylePreviewChange({
3469
3534
  siteStyle: currentSiteStyle,
3470
3535
  selection: state.previewed,
3471
3536
  baseTheme: theme,
3472
- headerSelectionContext,
3473
- footerSelectionContext
3474
- }).themeOverlay.typography;
3537
+ headerSelectionContext
3538
+ });
3539
+ const currentTypography = currentPreviewPlan.themeOverlay.typography;
3475
3540
  const chromeLookModels = buildSiteChromeLookModels({
3476
3541
  state,
3477
3542
  siteStyle: currentSiteStyle,
3478
- headerSelectionContext,
3479
- footerSelectionContext
3543
+ headerSelectionContext
3480
3544
  });
3481
3545
  const currentHeaderLayout = getHeaderLayout(state.previewed.headerLayoutId);
3482
3546
  const currentHeaderStyle = getHeaderStyle(state.previewed.headerStyleId);
3483
- const currentFooterLayout = getFooterLayout(chromeLookModels.footerLayout.renderedLayoutId);
3484
3547
  const currentFooterLook = state.previewed.footerLookId ? findFooterLook(state.previewed.footerLookId) : findFooterLook(chromeLookModels.footer.renderedLookId);
3485
3548
  const headerSurfaceState = siteChromeCustomize?.getSurfaceState("header") ?? { kind: "unavailable" };
3486
3549
  if (state.expandedRow === "typography" && typographySurface.kind !== "overview") return /* @__PURE__ */ jsxs("div", {
@@ -3573,32 +3636,14 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3573
3636
  }) : null
3574
3637
  }),
3575
3638
  /* @__PURE__ */ jsx(SiteChromeLookRow, {
3576
- label: "Footer layout",
3577
- ariaLabel: "Footer layout",
3578
- defaultDescription: "Choose the footer structure.",
3579
- expanded: state.expandedRow === "footer-layout",
3580
- onToggle: () => handleToggleRow("footer-layout"),
3581
- currentId: chromeLookModels.footerLayout.renderedLayoutId,
3582
- currentLabel: currentFooterLayout?.label ?? chromeLookModels.footerLayout.renderedLayoutId,
3583
- scopeDescription: "Changes the footer structure on every page.",
3584
- options: chromeLookModels.footerLayout.options,
3585
- diagnostics: [],
3586
- onCycle: (direction) => {
3587
- const next = cycleSiteChromeLookId(chromeLookModels.footerLayout.options, chromeLookModels.footerLayout.renderedLayoutId, direction);
3588
- if (next !== void 0) handlePreviewFooterLayout(next);
3589
- },
3590
- onPreview: handlePreviewFooterLayout,
3591
- disabled: aggregateMutationControlsDisabled
3592
- }),
3593
- /* @__PURE__ */ jsx(SiteChromeLookRow, {
3594
- label: "Footer look",
3595
- ariaLabel: "Footer look",
3596
- defaultDescription: "Use the footer look chosen for this site style.",
3639
+ label: "Footer links",
3640
+ ariaLabel: "Footer link treatment",
3641
+ defaultDescription: "Use the footer link treatment chosen for this site style.",
3597
3642
  expanded: state.expandedRow === "footer",
3598
3643
  onToggle: () => handleToggleRow("footer"),
3599
3644
  currentId: state.previewed.footerLookId,
3600
- currentLabel: state.previewed.footerLookId ? currentFooterLook?.label ?? "Unknown footer Look" : `${currentFooterLook?.label ?? "Site style"} (default)`,
3601
- scopeDescription: "Changes the footer on every page.",
3645
+ currentLabel: state.previewed.footerLookId ? currentFooterLook?.label ?? "Unknown footer link treatment" : `${currentFooterLook?.label ?? "Site style"} (default)`,
3646
+ scopeDescription: "Changes footer navigation links on every page.",
3602
3647
  options: chromeLookModels.footer.options,
3603
3648
  diagnostics: chromeLookModels.footer.diagnostics,
3604
3649
  onCycle: (direction) => {
@@ -3608,13 +3653,13 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3608
3653
  onPreview: handlePreviewFooterLook,
3609
3654
  disabled: aggregateMutationControlsDisabled
3610
3655
  }),
3611
- /* @__PURE__ */ jsx(PersonalityRow, {
3656
+ /* @__PURE__ */ jsx(ButtonStyleRow, {
3612
3657
  expanded: state.expandedRow === "buttons",
3613
3658
  onToggle: () => handleToggleRow("buttons"),
3614
3659
  siteStyle: currentSiteStyle,
3615
- currentId: state.previewed.buttonPersonalityId,
3616
- currentLabel: currentPersonality?.name ?? state.previewed.buttonPersonalityId,
3617
- onPreview: handlePreviewPersonality,
3660
+ current: state.previewed.buttonStyleSelection,
3661
+ previewTheme: currentPreviewPlan.themeOverlay,
3662
+ onPreview: handlePreviewButtonStyle,
3618
3663
  disabled: aggregateMutationControlsDisabled
3619
3664
  }),
3620
3665
  /* @__PURE__ */ jsx(TypographyRow, {
@@ -3703,7 +3748,7 @@ function StyleConfiguratorSaveControls({ previewingChange, applyAllowed, saving,
3703
3748
  }) : null
3704
3749
  ] });
3705
3750
  }
3706
- function StyleRowFrame({ label, currentLabel, swatch, expanded, onToggle, children }) {
3751
+ function StyleRowFrame({ label, currentLabel, currentSummary, swatch, expanded, onToggle, children }) {
3707
3752
  return /* @__PURE__ */ jsx(Collapsible, {
3708
3753
  open: expanded,
3709
3754
  onOpenChange: onToggle,
@@ -3722,7 +3767,10 @@ function StyleRowFrame({ label, currentLabel, swatch, expanded, onToggle, childr
3722
3767
  children: [/* @__PURE__ */ jsx("div", {
3723
3768
  className: "text-xs uppercase tracking-wide text-muted-foreground",
3724
3769
  children: label
3725
- }), /* @__PURE__ */ jsx("div", {
3770
+ }), currentSummary ? /* @__PURE__ */ jsx("div", {
3771
+ "aria-label": currentLabel,
3772
+ children: currentSummary
3773
+ }) : /* @__PURE__ */ jsx("div", {
3726
3774
  className: "truncate text-sm font-medium",
3727
3775
  children: currentLabel
3728
3776
  })]
@@ -3761,23 +3809,23 @@ function SiteStyleRow({ expanded, onToggle, current, onPreview, disabled }) {
3761
3809
  })
3762
3810
  });
3763
3811
  }
3764
- function PersonalityRow({ expanded, onToggle, siteStyle, currentId, currentLabel, onPreview, disabled }) {
3812
+ function ButtonStyleRow({ expanded, onToggle, siteStyle, current, previewTheme, onPreview, disabled }) {
3765
3813
  return /* @__PURE__ */ jsx(StyleRowFrame, {
3766
3814
  label: "Button style",
3767
- currentLabel,
3815
+ currentLabel: findButtonStyleRecipe(current.styleId).accessibilityLabel,
3816
+ currentSummary: /* @__PURE__ */ jsx(ButtonStylePreviewPair, {
3817
+ selection: current,
3818
+ previewTheme,
3819
+ compact: true
3820
+ }),
3768
3821
  expanded,
3769
3822
  onToggle,
3770
- children: /* @__PURE__ */ jsx("ul", {
3771
- role: "radiogroup",
3772
- "aria-label": "Button style",
3773
- className: "list-none space-y-1 p-0",
3774
- children: useMemo(() => requireEntriesForCuratedChoices(buttonPersonalities, siteStyle.buttonPersonalityChoices), [siteStyle.buttonPersonalityChoices]).map((personality) => /* @__PURE__ */ jsx(PickerOption, {
3775
- selected: personality.id === currentId,
3776
- label: personality.name,
3777
- description: personality.description,
3778
- onSelect: () => onPreview(personality.id),
3779
- disabled
3780
- }, personality.id))
3823
+ children: /* @__PURE__ */ jsx(ButtonStylePicker, {
3824
+ selections: siteStyle.buttonStyleChoices,
3825
+ current,
3826
+ previewTheme,
3827
+ onPreview,
3828
+ disabled
3781
3829
  })
3782
3830
  });
3783
3831
  }
@@ -4175,6 +4223,7 @@ function paletteApplyPlanErrorMessage(error) {
4175
4223
  switch (error) {
4176
4224
  case "invalid-palette-state": return "Palette details are unavailable. Refresh and try again.";
4177
4225
  case "curated-palette-missing": return "This curated palette is no longer available. Refresh and try again.";
4226
+ case "no-selection-changes": return "There are no design changes to apply.";
4178
4227
  default: return assertNever$1(error);
4179
4228
  }
4180
4229
  }
@@ -4212,7 +4261,6 @@ function expandedRowForPreviewDesignRow(row) {
4212
4261
  case "header": return "header-layout";
4213
4262
  case "header-layout":
4214
4263
  case "header-style":
4215
- case "footer-layout":
4216
4264
  case "footer": return row;
4217
4265
  default: return assertNever$1(row, "Unhandled preview design row");
4218
4266
  }
@@ -4236,11 +4284,11 @@ function WarningNotice({ warnings, onDismiss }) {
4236
4284
  });
4237
4285
  }
4238
4286
  function describeWarning(warning) {
4239
- return `Button style changed to ${warning.fellBackTo} because ${warning.requested} is not offered for this site style.`;
4287
+ return `Button style changed to ${warning.fellBackTo.styleId} because ${warning.requested} is not offered for this site style.`;
4240
4288
  }
4241
4289
  //#endregion
4242
4290
  //#region ../preview-next/src/client/preview/PreviewEditorSidebar.tsx
4243
- function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl = null, pageId, entryData, contentTypeSchema, referenceContentTypeKeys = [], draftContent, currentTemplate, theme, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonPersonalityId = null, runtimePaletteState, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, themeSelectionFooterContext, designRowRequest = null, apiClient, bearerToken, supabaseUrl, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, siteStyleAccess = { kind: "hidden" }, activeTab, onTabChange, onClose, onFooterSaved, viewportMode, viewportWidth, zoom, onViewportModeChange, onViewportWidthChange, onZoomChange }) {
4291
+ function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl = null, pageId, entryData, contentTypeSchema, referenceContentTypeKeys = [], draftContent, currentTemplate, theme, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonStyleSelection = null, runtimePaletteState, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, apiClient, bearerToken, supabaseUrl, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, siteStyleAccess = { kind: "hidden" }, activeTab, onTabChange, onClose, onFooterSaved, viewportMode, viewportWidth, zoom, onViewportModeChange, onViewportWidthChange, onZoomChange }) {
4244
4292
  const controller = useEntryController();
4245
4293
  const controllerBlocks = controller.blocks;
4246
4294
  const uiStore = useEditorUiStoreInstance();
@@ -4367,7 +4415,6 @@ function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl = null, page
4367
4415
  blockEditorRef,
4368
4416
  onBlocksChange: handleBlocksChange,
4369
4417
  metadataPanel: metadataSectionContent,
4370
- designOpenRequestId: designRowRequest?.id ?? null,
4371
4418
  designTakeoverActive,
4372
4419
  designPanel: canInspectSiteStyle(siteStyleAccess) ? /* @__PURE__ */ jsx(StyleConfigurator, {
4373
4420
  siteId,
@@ -4380,7 +4427,7 @@ function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl = null, page
4380
4427
  initialSelections: {
4381
4428
  selectionVersion: themeSelectionVersion,
4382
4429
  selectionUpdatedAt: themeSelectionUpdatedAt,
4383
- buttonPersonalityId: themeSelectionButtonPersonalityId,
4430
+ buttonStyleSelection: themeSelectionButtonStyleSelection,
4384
4431
  runtimePaletteState,
4385
4432
  headerLayoutId: themeSelectionHeaderLayoutId,
4386
4433
  headerStyleId: themeSelectionHeaderStyleId,
@@ -4388,8 +4435,6 @@ function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl = null, page
4388
4435
  footerLookId: themeSelectionFooterLookId
4389
4436
  },
4390
4437
  headerSelectionContext: themeSelectionHeaderContext,
4391
- footerSelectionContext: themeSelectionFooterContext,
4392
- expandedRowRequest: designRowRequest,
4393
4438
  onFocusedSurfaceChange: setDesignTakeoverActive,
4394
4439
  siteStyleAccess
4395
4440
  }) : null,
@@ -4422,6 +4467,7 @@ function PreviewEditorSidebar({ surfaceId, siteId, dashboardBaseUrl = null, page
4422
4467
  manageLinksHref: `${dashboardBaseUrl?.replace(/\/$/u, "") ?? ""}/dashboard/sites/${siteId}/navigation`,
4423
4468
  manageSettingsHref: `${dashboardBaseUrl?.replace(/\/$/u, "") ?? ""}/dashboard/sites/${siteId}/settings`,
4424
4469
  legalRegion: theme?.footer?.bottomBar?.enabled === true ? "separate" : "integrated",
4470
+ loadingFallback: /* @__PURE__ */ jsx(ContentSpinner, { className: "py-8" }),
4425
4471
  initialTarget: previewInspection.kind === "footer-module" ? {
4426
4472
  kind: "module",
4427
4473
  moduleId: previewInspection.moduleId