@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
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { $ as beginAutosaveBatch, $a as resolveEventCalendarListPageSize, $c as getImageUrl, $d as RotateCcw, $i as NAV_LINK_LETTER_SPACING_MAP, $l as Input, $n as isInternalResolvedLinkValue, $o as resolveEventLinkProps, $r as augmentManifestWithStyleGroups, $s as resolveIconPickerPreset, $t as evaluateVisibility, $u as clsx, Aa as generateCssVars, Ac as XIcon, Ad as unsafeAsAppointmentServiceId, Af as CircleAlert, Ai as mergeHeaderNavTypographyPreference, Al as hasEmptyOption, An as CSS, Ao as generateCardCss, Ar as normalizeEventRegistrationPageSurfaceSubject, As as getFeatureCardIconCompletion, At as canUndoHistory, Au as DropdownMenuItem, Ba as isOfferingsPreviewSourceKey, Bc as resolveMediaNodeResponsiveImage, Bd as X, Bf as Archive, Bi as componentRuntimeRulesForTheme, Bl as Textarea, Bn as projectRecurringSchedule, Bo as normalizeLocationMapProps, Br as buildCartDisplay, Bs as resolveBlockIconRenderValue, Bt as createSnapshotFromPageRecord, Bu as __spreadArray, C as usePreviewThemeOverlay, Cc as MapPinIcon$1, Cd as publicEventTicketTypes, Cf as Crop, Ci as MQ_SM_UP, Cl as getFieldIntent, Cn as closestCenter, Co as normalizeEventCategoryIdsCsv, Cr as WIZARD_STEPS$1, Cs as ICON_CONFIG, Cu as Card, Dc as PlusIcon, Dd as parseMediaAssetId, Df as CirclePlus, Di as boxStylesTransforms, Dl as useBlockContext, Dn as useDroppable, Do as normalizeEventSurfaceScope, Dr as buildGiftingInteractiveIslandProps, Ds as FEATURE_CARD_GENERATED_ICON_SIZE_PX, Dt as useEditorUiStoreInstance, Ec as PlayIcon, Ed as expectParsedBrandedId, Ef as Clock3, Ei as getAnchorClasses, El as isNonEmptyValue, En as useDraggable, Eo as normalizeEventSurfacePresetsCsv, Er as giftingBlockDefinition, Es as mediaSchema, Et as useEditorUiStore, Eu as CardTitle, Fc as computeMediaTransformStyle, Fd as unsafeAsPositiveByteCount$1, Ff as ChevronDown, Fi as retargetCompiledBoundaryRuntimeForContentAdjacency, Fl as useField, Fn as isSupportedLoaderEndpoint, Fo as resolveOnColorForThemeToken, Fr as buildCheckoutInteractiveIslandProps, Fs as toFeatureCardIconSuggestionInputs, Ft as unsafeAsLinkedContentEntryId, Fu as __awaiter, Ga as resolveOfferingsPreviewGroupOrderEntries, Gc as attachRenderableMediaAssetFields, Gd as Ticket, Gi as isThemeV2NormalEditorRawStyleFieldName, Gl as SelectTrigger, Gn as planSiteOverlayHeaderClearance, Go as formatEventPrice, Gr as EMPTY_COMMERCE_CART_STATE, Gs as unwrapRichTextRoot, Gt as usePalette, Gu as useControllableState, Ha as normalizeOfferingsPreviewItemLimit, Hc as setContextResolveImageUrlContext, Hf as __exportAll, Hi as designRuntimeRulesForTheme, Hl as Select, Hn as siteHeaderManifest, Ho as formatDate$3, Hr as buildProductDetailDisplay, Hs as parseGeneratedIconSetId, Hu as useId$1, Ic as getCurrentResolveImageUrlContext, Id as unsafeAsPositiveSeconds, If as Check, Ii as retargetCompiledRuntimeFieldsForContentAdjacency, Il as Tooltip, In as gradientToCss, Io as resolveTokenOrCssColorValue, Ir as buildProductDetailInteractiveIslandProps, Is as buildGeneratedBlockIconRenderAssetLookupFromUnknown, It as recordsEqual, Iu as __extends, Ja as resolveSpacing, Jc as formatAspectRatioToken, Jd as Sparkles, Ji as getComponentBorderWidthPx, Jl as Badge, Jn as mediaTransforms, Jo as formatTime$3, Jr as deriveCommerceCheckoutState, Js as coerceInlineTextWithFallback, Jt as validateBlockManifestIssues, Ju as Primitive, Ka as resolveOfferingsPreviewGroups, Kc as isRotationDimensionSwap, Ki as isThemeV2NormalEditorRawStylePath, Kl as SelectValue, Kn as visibleHeaderClearancePx, Ko as formatEventPriceDisplay, Kr as buildPassCartItem, Ks as isObjectRecord, Kt as recoveryConflictCopy, Ku as createContextScope, La as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Lc as renderAudio, Ld as err$2, Lf as Box, Li as normalEditorCuratedPromotedFieldPaths, Ll as TooltipContent, Ln as GRADIENT_PRESETS, Lo as getTextColorForBackground, Lr as buildProductListInteractiveIslandProps, Ls as getBlockIconSemanticId, Lu as __generator, Ma as runTransforms, Mc as ImagePresets, Md as unsafeAsFormId, Mf as ChevronUp, Mi as formatSiteChromeBackgroundTokenLabel, Ml as mapOptionValueForSelect, Mn as useCombinedRefs, Mo as normalizeBoxStylesCardVariant, Mr as checkoutBlockDefinition, Ms as resolveFeatureCardGeneratedIconSizePx, Mt as pushHistoryEntry, Mu as DropdownMenuSeparator, Na as ctaButton, Nc as MediaPlaceholder, Nd as unsafeAsMediaAssetId, Nf as ChevronRight, Ni as applyCompiledRuntimeFieldsToContent, Nl as unmapValueFromSelect, Nn as useIsomorphicLayoutEffect, No as normalizeCardVariantRole, Nr as cartBlockDefinition, Ns as shouldReserveFeatureCardIconZone, Nt as redoHistory, Nu as DropdownMenuTrigger, Oc as ShoppingCartIcon, Od as parseSiteId, Of as CircleMinus, Oi as resolveSurfaceForegroundStyles, Ol as SdkConfigProvider, On as useSensor, Oo as normalizeEventVenueId, Or as courseRegistrationBlockDefinition, Os as FEATURE_CARD_ICON_TREATMENTS, Ot as useOptionalEditorUiStoreInstance, Ou as DropdownMenu, Pc as buildResolveImageUrlContext, Pd as unsafeAsPassId, Pf as ChevronLeft, Pi as compileEditorModelRuntime, Pl as FieldFrame, Pn as useUniqueId, Po as isCssColorLiteral, Pr as buildCartInteractiveIslandProps, Ps as suggestSemanticIconForFeatureCard, Pt as undoHistory, Pu as __assign, Qa as getEventRuntimeFiltersKey, Qc as getDirectImageUrlForMediaAsset, Qd as Search, Qi as NAV_LINK_BORDER_RADIUS_MAP, Ql as PopoverTrigger, Qn as createManifestValidator, Qo as resolveEventCta, Qr as augmentManifest, Qs as isIconPickerPreset, Qt as FormRenderer, Qu as cn$1, Ra as buildOfferingsPreviewRenderStates, Rc as renderVideo, Rd as ok$3, Rf as ArrowUp, Ri as planPageDesignLayoutLookCompatibility, Rl as TooltipProvider, Rn as getBlockDefinition, Ro as featuresFromHex, Rr as buildShopInteractiveIslandProps, Rs as getGeneratedBlockIconStyleState, Rt as useDebouncedLatestSave, Ru as __read, S as PreviewThemeOverlayProvider, Sa as defaultThemeTokens, Sc as MailIcon, Sd as publicEventScalarPrice, Sf as EllipsisVertical, Si as MQ_SM_DOWN, Sl as useBackendWatch, Sn as PointerSensor, So as normalizeEventBlockKind, Sr as resolveRegistrationTarget, Ss as ACCORDION_TRIGGER_LETTER_SPACING, St as EntryControllerProvider, Su as createCollapsibleScope, Tc as PhoneIcon, Td as assertNever$5, Tf as Copy, Ti as BACKGROUND_POSITION_PRESET_VALUES, Tl as isHeaderField, Tn as useDndContext, To as normalizeEventStaffMemberId, Tr as getWizardStepsForContext$1, Ts as PUBLIC_DOWNLOAD_MEDIA_TYPES, Tu as CardHeader, Ua as resolveOfferingsPreviewCoursePath, Uc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Uf as __toESM, Ui as getCuratedSiteStyle, Ul as SelectContent, Un as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Uo as formatEventCompactDateRail, Ur as formatCommercePrice, Us as parseSiteIconStyleGuideVersionId, Uu as useDirection, Va as normalizeOfferingsPreviewGroupOrder, Vc as resolveMediaStorageUrl, Vd as Upload, Vf as __commonJSMin, Vl as Slider, Vn as siteFooterManifest, Vo as toLocationMapHydrationProps, Vr as buildProductCardDisplay, Vs as parseGeneratedIconAssetId, Vu as __spreadArrays, Wa as resolveOfferingsPreviewGroupCta, Wc as resolveMediaSlotContract, Wd as Trash2, Wi as surfaceResolutionContextFromTheme, Wl as SelectItem, Wn as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, Wo as formatEventDateParts, Wr as formatInterval, Ws as createRichTextDocFromMarkdown, Wt as PaletteProvider, Wu as createCollection, Xa as eventListPaginationActionSchema, Xc as resolveMediaTransformForAspect, Xi as parseBlockCustomCssRules, Xl as Popover, Xn as uiTransforms, Xo as getContainerClass, Xr as productItemKey, Xs as isInlineTextEmpty, Xt as createManifestFormAdapter, Xu as cva, Ya as buildEventRuntimeFilters, Yc as parseAspectRatioValue, Yi as getComponentShadowVar, Yn as layoutTransforms, Yo as getCardOrientation, Yr as parseStoredCommerceCartState, Ys as inlineTextToPlainText, Yt as ManifestForm, Yu as Button, Za as eventPageSizeSchema, Zc as asRecord, Zd as Settings, Zi as parseCustomCssRules, Zl as PopoverContent, Zn as formattingTransforms, Zo as groupEventsByDate, Zr as reduceCommerceCart, Zs as parseInlineTextFromUnknown, Zu as useComposedRefs, _a as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, _c as FileArchiveIcon, _d as parseEventPageSurfaceSubject, _f as FilePlay, _i as PUBLIC_FILE_FIELD_KINDS, _l as rgbColorValue, _n as DEFAULT_LAUNCH_READINESS_INPUT, _o as when, _r as toRegistrationEvents, _s as asDesignBlockId, _t as EditorProvider, _u as CollapsibleContent, aa as INPUT_SPACING_MAP, ac as ArrowRightIcon, ad as unsafeAsEditorBlockValues, ai as blogFeaturedPostFragment, al as generateButtonCss, an as createBlock, ao as columnOptionSchema, ar as newsletterSignupBlockDefinition, as as blockBookingPaymentTermsSchema, au as List, b as PreviewDesignCoordinatorProvider, ba as foregroundTokenForBackgroundAppearanceColorToken, bc as FileTextIcon, bd as publicEventPricingMode, bi as MQ_MD_DOWN, bl as surfaceForegroundDeclarations, bn as DndContext, bo as eventScheduleScopeValues, br as resolveDiscountContext, bs as ACCORDION_SPACING_MAP, bt as useUISelector, bu as Root, cc as ChevronDownIcon, cd as formatBookingDateTime, cf as LoaderCircle, ci as formCopyFragment, cl as generateBaseInteractiveCSS, cn as deleteBlock, co as eventLayoutSchema, cr as buildEventListingInteractiveIslandProps, cs as defineInteractiveIslandMetaKeys, ct as PreviewRichTextEditor, cu as ScrollableDialogContent, dc as ChevronUpIcon, dd as formatLocalScheduleDate, df as ImagePlus, di as ctaCopyFragment, dl as parseThemeButtonVariantId, do as weekStartSchema, dr as buildEventCalendarListingDisplay, ds as defineProgressiveBlockRuntime, dt as useRichTextEditor, du as DialogContent, ea as NAV_LINK_PADDING_MAP, ec as SEMANTIC_ICON_DEFINITIONS, ed as parseFooterModuleId, ei as richTextFragment, el as getAtPath, en as createStoreBackend, eo as resolveEventListPaginationAction, er as ImageResolveContextProvider, es as getEventAvailability, et as confirmAutosaveBatch, eu as Tabs, f as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, fa as boundaryRuntimeMetricsForTransition, fc as CircleMinusIcon, fd as getBookingLocalDateKey, ff as ImageOff, fi as heroCtaRowFragment, fl as themeButtonClassName, fn as mutateBlockContent, fo as eventCalendarListLayoutCompatibleDisplayModeValues, fr as buildEventCalendarListingRender, ft as EMPTY_DOC, fu as DialogDescription, ga as sectionTransitionVariantForBoundaryOptionId, gc as ExternalLinkIcon, gd as toScheduledBookingDateTime, gf as FileSpreadsheet, gi as defineFragment, gl as mergeStyles, gn as decodePublicProductCategorySelectorQuery, go as richText, gr as buildEventRegistrationInteractiveIslandProps, gs as planSiteChromePlacement, gt as InlineTextEditor, gu as Collapsible, ha as sectionTransitionFamilyForBoundaryOptionId, hc as DownloadIcon, hd as toBookingTimeZone, hf as FileText, hi as bodyCopyFragment, hl as cssVarValue, hn as reorderPageSurfaceSlotBlocks, ho as el, hr as eventRegistrationBlockDefinition, hs as splitPositioningClasses, ht as insertOrReplaceRichTextImage, hu as DialogTitle, i as usePreviewDesignHistoryOrder, ia as INPUT_FONT_SIZE_MAP, ic as ArrowLeftIcon, id as unsafeAsEditorBlockId, ii as faqHeadingFragment, il as AFFORDANCE_SUPPRESS_CLASS, in as getPageDesignEditorState, io as calendarTabViewsSchema, ir as productDetailBlockDefinition, is as resolveRuntimeEventPricing, it as rejectAutosaveBatch, iu as Content$1, ja as createTransformRegistry, jc as createIcon, jd as unsafeAsCustomerPassId, jf as ChevronsUpDown, ji as readHeaderNavFontSizePreference, jl as mapCurrentValueForSelect, jn as isKeyboardEvent, jo as generateShadowValue, jr as resolveEventRegistrationScopedEvents, js as parseFeatureCardGeneratedIconSizePx, jt as createHistoryState, ka as expandPalette, kc as UploadIcon, kd as unsafeAsAppointmentResourceId, kf as CircleCheck, ki as resolveBackgroundColorValue, kl as useSdkConfig, kn as useSensors, ko as publicEventSchema, kr as buildCourseRegistrationInteractiveIslandProps, ks as createFeatureCardIconKey, kt as canRedoHistory, ku as DropdownMenuContent, lc as ChevronLeftIcon, ld as formatBookingInstant, lf as Image, li as testimonialsCarouselFragment, ll as generateInteractiveChildInheritanceCSS, ln as deleteEntrySlotBlock, lo as filterAutoShowSchema, lr as eventCalendarBlockDefinition, ls as createZodCodec, lt as PreviewInlineTextEditor, lu as Dialog, ma as sectionTransitionFamilies, mc as ClockIcon$1, md as resolveBookingTimeZoneId, mf as File, mi as heroCopyFragment, ml as borderColorStyle, mn as reorderEntrySlotBlocks, mo as bind, mr as buildFormInteractiveIslandProps, ms as markEditableSurfaceForwarding, mt as getRichTextImagePositionFromTarget, mu as DialogHeader, n as useSiteChromeCustomizeOptional, na as NAV_LINK_TEXT_SIZE_MAP, nc as isSemanticIconId, nd as createEditorRemoveBlockCommand, nf as Pencil, ni as cardFragment, nn as toRoutableLinkPayload, no as normalizeCsvString, nr as shopBlockDefinition, ns as getLocalDateKey, nt as enqueueTransaction, nu as TabsList, oa as LABEL_FONT_SIZE_MAP, oc as CalendarIcon$1, od as addLocalScheduleDays, of as Minus, oi as singleButtonFragment, ol as generateEffectsCSS, on as createEntrySlotBlock, oo as eventButtonVariantSchema, or as buildNewsletterFormInteractiveIslandProps, os as buildInteractiveIslandProps, ot as resolvePreviewSidebarTab, ou as Root2$1, p as reportPreviewDesignError, pa as defaultSectionTransitionVariantForFamily, pc as CirclePlusIcon, pd as parseBookingLocalDate, pf as GripVertical, pi as ctaRowFragment, pl as backgroundColorStyle, pn as reorderBlocks, po as eventCalendarListLayoutOptions, pr as formBlockDefinition, ps as composeHeaderSectionWrapperClassName, pt as RichTextEditorSurface, pu as DialogFooter, qa as isSemanticSpacing, qc as normalizeRightAngle, qd as Star, qi as pageDesignEditorBackgroundOverrideOwner, ql as Label, qn as contentTransforms, qo as formatEventTeacherLine, qr as buildProductCartItem, qs as isRecord$21, qt as unfinishedBlockCopy, qu as composeEventHandlers, r as PreviewDesignHistoryOrderProvider, ra as FONT_WEIGHT_MAP, rc as ArrowDownIcon, rd as createEditorReorderBlocksCommand, ri as faqAccordionFragment, rn as applyPageDesignEditorAction, ro as normalizeOptionalId, rr as productListBlockDefinition, rs as getLocalMinuteOfDay, rt as idleEditorTransactionQueueState, ru as TabsTrigger, sc as CheckIcon$1, sd as formatBookingDate, si as formEmbedFragment, sl as generateShadowValue$1, sn as createPageSurfaceSlotBlock, so as eventCalendarDefaultViewSchema, sr as eventListingBlockDefinition, ss as createInteractiveIslandCodec, su as Trigger$1, t as SiteChromeCustomizeProvider, ta as NAV_LINK_PADDING_X_MAP, tc as getSemanticIconComponent, td as createEditorInsertBlockCommand, tf as Plus, ti as headingFragment, tl as siblingPath$1, tn as listContentTypes, to as normalizeCsvIds, tr as useImageResolveContextOptional, ts as getEventAvailabilityStatus, tt as deriveTransactionCapabilities, tu as TabsContent, u as PREVIEW_DESIGN_LOAD_ERROR_MESSAGE, uc as ChevronRightIcon, ud as formatBookingTime, uf as ImageUp, ui as testimonialsHeadingFragment, ul as TokenResolver, un as deletePageSurfaceSlotBlock, uo as previewStageSchema, ur as buildEventCalendarInteractiveIslandProps, us as defineClientOwnedBlockRuntime, ut as PreviewTextEditor, uu as DialogClose, va as backgroundAppearanceColorTokenNames, vc as FileAudioIcon, vd as formatBookingPriceDisplay, vf as FileHeadphone, vi as siteOptionSources, vl as textColorStyle, vn as deriveLaunchReadiness, vo as bindingSchema, vr as findEventByOccurrenceId, vs as assertNever$6, vt as useEditor, wc as MinusIcon, wd as formatCurrencyAmount, wf as CreditCard, wi as MQ_TABLET_ONLY, wl as getModalConfig, wn as getClientRect, wo as normalizeEventScheduleScope, wr as getStepNumber$1, ws as ICON_SIZE_PX, wt as useEntryEditorController, wu as CardContent, xa as parseBackgroundAppearanceColorToken, xc as InfoIcon, xd as publicEventPricingType, xf as EyeOff, xi as MQ_MD_UP, xl as surfaceForegroundValue, xn as KeyboardCode, xo as eventSurfaceScopeValues, xr as resolveEventRequiresPayment, xs as ACCORDION_TRIGGER_FONT_SCALE, xt as EditableBlockProvider, xu as Trigger, ya as backgroundAppearanceQuickColorTokenNames, yc as FileSpreadsheetIcon, yd as publicEventPricingCurrency, yf as FileArchive, yi as MQ_LG_UP, yl as DEFAULT_SURFACE_TEXT_COLOR, yn as AMBIENT_BACKGROUND_ROLES$1, yo as eventBlockKindValues, yr as findPreSelectedEvent, ys as ACCORDION_OPEN_ACCENT_THICKNESS, yu as Content, za as inferLegacyOfferingsPreviewGroupOrder, zc as resolveImageUrlWithContext, zd as lucide_react_exports, zf as ArrowDown, zi as resolveVisiblePromotedFieldPathsForEditorBlock, zl as TooltipTrigger, zn as listBlockDescriptors, zo as buildGoogleMapsDirectionsUrl, zr as getShopDisplayForItems, zs as parseBlockIconValue, zt as createRoutingHelpers, zu as __rest } from "./SiteChromeCustomizeContext-BQUY2dEk.mjs";
3
- import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-RRu7wyQ5.mjs";
4
- import { _ as API_ENDPOINTS, a as usePreviewToken, c as createBearerAPIClient, d as unwrapResponse, g as resolveSurfaceDocumentAttributes, h as SURFACE_IDS, i as usePreviewAuthFetch, l as ApiEnvelopeError, m as SURFACE_DOCUMENT_DATA_ATTRIBUTE, n as markPreviewAuthExpired, o as isPreviewRuntimeSessionEditable, r as usePreviewAuth, s as ApiRequestError, t as initPreviewAuth, u as extractApiEnvelopeErrorDetails } from "./previewAuthStore-a_cBD28m.mjs";
2
+ import { $ as confirmAutosaveBatch, $a as resolveEventListPaginationAction, $c as getImageUrl, $d as Sparkles, $i as NAV_LINK_TEXT_SIZE_MAP, $l as Badge, $n as shopBlockDefinition, $o as getLocalDateKey, $r as cardFragment, $s as resolveIconPickerPreset, $t as createStoreBackend, $u as Primitive, Aa as createTransformRegistry, Ac as XIcon, Ad as assertNever$5, Af as Copy, Ai as applyCompiledRuntimeFieldsToContent, Al as isHeaderField, An as isKeyboardEvent, Ao as generateShadowValue, Ar as cartBlockDefinition, As as shouldReserveFeatureCardIconZone, At as createHistoryState, Au as CardHeader, Ba as normalizeOfferingsPreviewGroupOrder, Bc as resolveMediaNodeResponsiveImage, Bd as unsafeAsPositiveByteCount$1, Bf as Check, Bi as getCuratedSiteStyle, Bl as useField, Bn as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Bo as formatEventCompactDateRail, Br as formatCommercePrice, Bs as parseSiteIconStyleGuideVersionId, Bu as __awaiter, Cc as MapPinIcon$1, Cd as formatBookingPriceDisplay, Cf as FileHeadphone, Ci as getAnchorClasses, Cl as textColorStyle, Cn as getClientRect, Co as normalizeEventScheduleScope, Cr as giftingBlockDefinition, Cs as mediaSchema, Ct as useEntryEditorController, Dc as PlusIcon, Dd as publicEventScalarPrice, Df as EllipsisVertical, Di as mergeHeaderNavTypographyPreference, Dl as useBackendWatch, Dn as useSensor, Do as normalizeEventVenueId, Dr as normalizeEventRegistrationPageSurfaceSubject, Ds as getFeatureCardIconCompletion, Dt as useOptionalEditorUiStoreInstance, Du as createCollapsibleScope, Ec as PlayIcon, Ed as publicEventPricingType, Ef as EyeOff, Ei as resolveBackgroundColorValue, El as surfaceForegroundValue, En as useDroppable, Eo as normalizeEventSurfaceScope, Er as buildCourseRegistrationInteractiveIslandProps, Es as createFeatureCardIconKey, Et as useEditorUiStoreInstance, Eu as Trigger, Fc as computeMediaTransformStyle, Fd as unsafeAsAppointmentServiceId, Ff as CircleAlert, Fi as planPageDesignLayoutLookCompatibility, Fl as hasEmptyOption, Fn as getBlockDefinition, Fo as resolveTokenOrCssColorValue, Fr as buildShopInteractiveIslandProps, Fs as getGeneratedBlockIconStyleState, Ft as recordsEqual, Fu as DropdownMenuItem, Ga as resolveOfferingsPreviewGroups, Gc as attachRenderableMediaAssetFields, Gd as X, Gf as __commonJSMin, Gi as getComponentBorderWidthPx, Gl as Textarea, Gn as mediaTransforms, Go as formatTime$3, Gr as deriveCommerceCheckoutState, Gs as coerceInlineTextWithFallback, Gt as recoveryConflictCopy, Gu as __spreadArray, Ha as resolveOfferingsPreviewCoursePath, Hc as setContextResolveImageUrlContext, Hd as err$2, Hf as ArrowUp, Hi as isThemeV2NormalEditorRawStyleFieldName, Hl as TooltipContent, Hn as planSiteOverlayHeaderClearance, Ho as formatEventPrice, Hr as EMPTY_COMMERCE_CART_STATE, Hs as unwrapRichTextRoot, Hu as __generator, Ia as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Ic as getCurrentResolveImageUrlContext, Id as unsafeAsCustomerPassId, If as ChevronsUpDown, Ii as resolveVisiblePromotedFieldPathsForEditorBlock, Il as mapCurrentValueForSelect, In as listBlockDescriptors, Io as buildGoogleMapsDirectionsUrl, Ir as getShopDisplayForItems, Is as parseBlockIconValue, Ja as buildEventRuntimeFilters, Jc as formatAspectRatioToken, Ji as parseCustomCssRules, Jl as SelectContent, Jn as formattingTransforms, Jo as groupEventsByDate, Jr as reduceCommerceCart, Js as parseInlineTextFromUnknown, Jt as ManifestForm, Ju as useDirection, Ka as isSemanticSpacing, Kc as isRotationDimensionSwap, Kd as Upload, Kf as __exportAll, Ki as getComponentShadowVar, Kl as Slider, Kn as layoutTransforms, Ko as getCardOrientation, Kr as parseStoredCommerceCartState, Ks as inlineTextToPlainText, Kt as unfinishedBlockCopy, Ku as __spreadArrays, La as buildOfferingsPreviewRenderStates, Lc as renderAudio, Ld as unsafeAsFormId, Lf as ChevronRight, Li as componentRuntimeRulesForTheme, Ll as mapOptionValueForSelect, Ln as projectRecurringSchedule, Lo as normalizeLocationMapProps, Lr as buildCartDisplay, Ls as resolveBlockIconRenderValue, Lt as useDebouncedLatestSave, Lu as DropdownMenuSeparator, Ma as ctaButton, Mc as ImagePresets, Md as parseMediaAssetId, Mf as CirclePlus, Mi as retargetCompiledBoundaryRuntimeForContentAdjacency, Ml as useBlockContext, Mn as useIsomorphicLayoutEffect, Mo as normalizeCardVariantRole, Mr as buildCheckoutInteractiveIslandProps, Ms as toFeatureCardIconSuggestionInputs, Mt as redoHistory, Nc as MediaPlaceholder, Nd as parseSiteId, Nf as CircleMinus, Ni as retargetCompiledRuntimeFieldsForContentAdjacency, Nl as SdkConfigProvider, Nn as useUniqueId, No as isCssColorLiteral, Nr as buildProductDetailInteractiveIslandProps, Ns as buildGeneratedBlockIconRenderAssetLookupFromUnknown, Nt as undoHistory, Nu as DropdownMenu, Oc as ShoppingCartIcon, Od as publicEventTicketTypes, Of as Crop, Oi as readHeaderNavFontSizePreference, Ol as getFieldIntent, On as useSensors, Oo as publicEventSchema, Or as resolveEventRegistrationScopedEvents, Os as parseFeatureCardGeneratedIconSizePx, Ot as canRedoHistory, Ou as Card, Pc as buildResolveImageUrlContext, Pd as unsafeAsAppointmentResourceId, Pf as CircleCheck, Pi as normalEditorCuratedPromotedFieldPaths, Pl as useSdkConfig, Pn as isSupportedLoaderEndpoint, Po as resolveOnColorForThemeToken, Pr as buildProductListInteractiveIslandProps, Ps as getBlockIconSemanticId, Pt as unsafeAsLinkedContentEntryId, Pu as DropdownMenuContent, Q as beginAutosaveBatch, Qa as resolveEventCalendarListPageSize, Qc as getDirectImageUrlForMediaAsset, Qd as Star, Qi as NAV_LINK_PADDING_X_MAP, Ql as Label, Qn as useImageResolveContextOptional, Qo as getEventAvailabilityStatus, Qr as headingFragment, Qs as isIconPickerPreset, Qt as evaluateVisibility, Qu as composeEventHandlers, Ra as inferLegacyOfferingsPreviewGroupOrder, Rc as renderVideo, Rd as unsafeAsMediaAssetId, Rf as ChevronLeft, Rl as unmapValueFromSelect, Rn as siteFooterManifest, Ro as toLocationMapHydrationProps, Rr as buildProductCardDisplay, Rs as parseGeneratedIconAssetId, Rt as createRoutingHelpers, Ru as DropdownMenuTrigger, S as usePreviewThemeOverlay, Sa as defaultThemeTokens, Sc as MailIcon, Sd as parseEventPageSurfaceSubject, Sf as FilePlay, Si as BACKGROUND_POSITION_PRESET_VALUES, Sl as rgbColorValue, Sn as closestCenter, So as normalizeEventCategoryIdsCsv, Sr as getWizardStepsForContext$1, Ss as PUBLIC_DOWNLOAD_MEDIA_TYPES, Su as CollapsibleContent, Tc as PhoneIcon, Td as publicEventPricingMode, Ti as resolveSurfaceForegroundStyles, Tl as surfaceForegroundDeclarations, Tn as useDraggable, To as normalizeEventSurfacePresetsCsv, Tr as courseRegistrationBlockDefinition, Ts as FEATURE_CARD_ICON_TREATMENTS, Tt as useEditorUiStore, Tu as Root, Ua as resolveOfferingsPreviewGroupCta, Uc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Ud as ok$3, Uf as ArrowDown, Ui as isThemeV2NormalEditorRawStylePath, Ul as TooltipProvider, Un as visibleHeaderClearancePx, Uo as formatEventPriceDisplay, Ur as buildPassCartItem, Us as isObjectRecord, Ut as PaletteProvider, Uu as __read, Va as normalizeOfferingsPreviewItemLimit, Vc as resolveMediaStorageUrl, Vd as unsafeAsPositiveSeconds, Vf as Box, Vi as surfaceResolutionContextFromTheme, Vl as Tooltip, Vn as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, Vo as formatEventDateParts, Vr as formatInterval, Vs as createRichTextDocFromMarkdown, Vu as __extends, Wa as resolveOfferingsPreviewGroupOrderEntries, Wc as resolveMediaSlotContract, Wd as lucide_react_exports, Wf as Archive, Wi as pageDesignEditorBackgroundOverrideOwner, Wl as TooltipTrigger, Wn as contentTransforms, Wo as formatEventTeacherLine, Wr as buildProductCartItem, Ws as isRecord$20, Wt as usePalette, Wu as __rest, Xa as eventPageSizeSchema, Xc as resolveMediaTransformForAspect, Xd as Ticket, Xi as NAV_LINK_LETTER_SPACING_MAP, Xl as SelectTrigger, Xn as isInternalResolvedLinkValue, Xo as resolveEventLinkProps, Xr as augmentManifestWithStyleGroups, Xs as canonicalizePersistedBlockButtonRole, Xu as useControllableState, Ya as eventListPaginationActionSchema, Yc as parseAspectRatioValue, Yd as Trash2, Yi as NAV_LINK_BORDER_RADIUS_MAP, Yl as SelectItem, Yn as createManifestValidator, Yo as resolveEventCta, Yr as augmentManifest, Ys as BLOCK_BUTTON_ROLE_OPTIONS, Yt as createManifestFormAdapter, Yu as createCollection, Za as getEventRuntimeFiltersKey, Zc as asRecord, Zi as NAV_LINK_PADDING_MAP, Zl as SelectValue, Zn as ImageResolveContextProvider, Zo as getEventAvailability, Zr as richTextFragment, Zs as isBlockButtonRole, Zt as FormRenderer, Zu as createContextScope, _a as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, _c as FileArchiveIcon, _d as getBookingLocalDateKey, _f as ImageOff, _i as MQ_MD_DOWN, _l as parseThemeButtonVariantId, _n as deriveLaunchReadiness, _o as bindingSchema, _r as resolveDiscountContext, _s as ACCORDION_SPACING_MAP, _t as useEditor, _u as DialogDescription, ac as ArrowRightIcon, ad as parseFooterModuleId, ai as formCopyFragment, an as createEntrySlotBlock, ao as eventButtonVariantSchema, ar as buildEventListingInteractiveIslandProps, as as defineInteractiveIslandMetaKeys, at as resolvePreviewSidebarTab, au as Tabs, ba as foregroundTokenForBackgroundAppearanceColorToken, bc as FileTextIcon, bd as toBookingTimeZone, bf as FileText, bi as MQ_SM_UP, bl as cssVarValue, bn as KeyboardCode, bo as eventSurfaceScopeValues, br as WIZARD_STEPS$1, bs as ICON_CONFIG, bt as EditableBlockProvider, bu as DialogTitle, ca as GRADIENT_PRESETS, cc as ChevronDownIcon, cd as createEditorReorderBlocksCommand, ci as ctaCopyFragment, cl as generateButtonCss, cn as deleteEntrySlotBlock, co as filterAutoShowSchema, cr as buildEventCalendarListingDisplay, cs as defineProgressiveBlockRuntime, ct as PreviewInlineTextEditor, cu as TabsTrigger, da as parseGradientPresetId, dc as ChevronUpIcon, dd as addLocalScheduleDays, df as Minus, di as heroCopyFragment, dl as featuresFromHex, dn as mutateBlockContent, do as eventCalendarListLayoutCompatibleDisplayModeValues, dr as buildFormInteractiveIslandProps, ds as markEditableSurfaceForwarding, dt as EMPTY_DOC, du as Root2$1, ea as FONT_WEIGHT_MAP, ec as SEMANTIC_ICON_DEFINITIONS, ed as Button, ei as faqAccordionFragment, el as getAtPath, en as listContentTypes, eo as normalizeCsvIds, er as productListBlockDefinition, es as getLocalMinuteOfDay, et as deriveTransactionCapabilities, f as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, fa as boundaryRuntimeMetricsForTransition, fc as CircleMinusIcon, fd as formatBookingDate, fi as bodyCopyFragment, fl as generateEffectsCSS, fn as reorderBlocks, fo as eventCalendarListLayoutOptions, fr as eventRegistrationBlockDefinition, fs as splitPositioningClasses, ft as RichTextEditorSurface, fu as Trigger$1, ga as sectionTransitionVariantForBoundaryOptionId, gc as ExternalLinkIcon, gd as formatLocalScheduleDate, gf as ImagePlus, gi as MQ_LG_UP, gl as TokenResolver, gn as DEFAULT_LAUNCH_READINESS_INPUT, go as when, gr as findPreSelectedEvent, gs as ACCORDION_OPEN_ACCENT_THICKNESS, gt as EditorProvider, gu as DialogContent, ha as sectionTransitionFamilyForBoundaryOptionId, hc as DownloadIcon, hd as formatBookingTime, hf as ImageUp, hi as siteOptionSources, hl as generateInteractiveChildInheritanceCSS, hn as decodePublicProductCategorySelectorQuery, ho as richText, hr as findEventByOccurrenceId, hs as assertNever$6, ht as InlineTextEditor, hu as DialogClose, i as usePreviewDesignHistoryOrder, ic as ArrowLeftIcon, id as clsx, if as RotateCcw, ii as formEmbedFragment, in as createBlock, io as columnOptionSchema, ir as eventListingBlockDefinition, is as createInteractiveIslandCodec, iu as Input, ja as runTransforms, jc as createIcon, jd as expectParsedBrandedId, jf as Clock3, ji as compileEditorModelRuntime, jl as isNonEmptyValue, jn as useCombinedRefs, jo as normalizeBoxStylesCardVariant, jr as buildCartInteractiveIslandProps, js as suggestSemanticIconForFeatureCard, jt as pushHistoryEntry, ju as CardTitle, ka as generateCssVars, kc as UploadIcon, kd as formatCurrencyAmount, kf as CreditCard, ki as formatSiteChromeBackgroundTokenLabel, kl as getModalConfig, kn as CSS, ko as generateCardCss, kr as checkoutBlockDefinition, ks as resolveFeatureCardGeneratedIconSizePx, kt as canUndoHistory, ku as CardContent, la as GRADIENT_PRESET_IDS, lc as ChevronLeftIcon, ld as unsafeAsEditorBlockId, li as heroCtaRowFragment, ll as expandPalette, ln as deletePageSurfaceSlotBlock, lo as previewStageSchema, lr as buildEventCalendarListingRender, lt as PreviewTextEditor, lu as Content$1, ma as sectionTransitionFamilies, mc as ClockIcon$1, md as formatBookingInstant, mf as Image, mi as PUBLIC_FILE_FIELD_KINDS, ml as generateBaseInteractiveCSS, mn as reorderPageSurfaceSlotBlocks, mo as el, mr as toRegistrationEvents, ms as asDesignBlockId, mt as insertOrReplaceRichTextImage, mu as Dialog, n as useSiteChromeCustomizeOptional, na as INPUT_SPACING_MAP, nc as isSemanticIconId, nd as useComposedRefs, nf as Settings, ni as blogFeaturedPostFragment, nn as applyPageDesignEditorAction, no as normalizeOptionalId, nr as newsletterSignupBlockDefinition, ns as blockBookingPaymentTermsSchema, nt as idleEditorTransactionQueueState, nu as PopoverContent, oc as CalendarIcon$1, od as createEditorInsertBlockCommand, of as Plus, oi as testimonialsCarouselFragment, on as createPageSurfaceSlotBlock, oo as eventCalendarDefaultViewSchema, or as eventCalendarBlockDefinition, os as createZodCodec, ou as TabsContent, p as reportPreviewDesignError, pa as defaultSectionTransitionVariantForFamily, pc as CirclePlusIcon, pd as formatBookingDateTime, pf as LoaderCircle, pi as defineFragment, pl as generateShadowValue$1, pn as reorderEntrySlotBlocks, po as bind, pr as buildEventRegistrationInteractiveIslandProps, ps as planSiteChromePlacement, pt as getRichTextImagePositionFromTarget, pu as ScrollableDialogContent, qa as resolveSpacing, qc as normalizeRightAngle, qf as __toESM, qi as parseBlockCustomCssRules, ql as Select, qn as uiTransforms, qo as getContainerClass, qr as productItemKey, qs as isInlineTextEmpty, qt as validateBlockManifestIssues, qu as useId$1, r as PreviewDesignHistoryOrderProvider, ra as LABEL_FONT_SIZE_MAP, rc as ArrowDownIcon, rd as cn$1, rf as Search, ri as singleButtonFragment, rn as getPageDesignEditorState, ro as calendarTabViewsSchema, rr as buildNewsletterFormInteractiveIslandProps, rs as buildInteractiveIslandProps, rt as rejectAutosaveBatch, ru as PopoverTrigger, sa as gradientToCss, sc as CheckIcon$1, sd as createEditorRemoveBlockCommand, sf as Pencil, si as testimonialsHeadingFragment, sl as AFFORDANCE_SUPPRESS_CLASS, sn as deleteBlock, so as eventLayoutSchema, sr as buildEventCalendarInteractiveIslandProps, ss as defineClientOwnedBlockRuntime, st as PreviewRichTextEditor, su as TabsList, t as SiteChromeCustomizeProvider, ta as INPUT_FONT_SIZE_MAP, tc as getSemanticIconComponent, td as cva, ti as faqHeadingFragment, tl as siblingPath$1, tn as toRoutableLinkPayload, to as normalizeCsvString, tr as productDetailBlockDefinition, ts as resolveRuntimeEventPricing, tt as enqueueTransaction, tu as Popover, u as PREVIEW_DESIGN_LOAD_ERROR_MESSAGE, ua as getGradientPreset, uc as ChevronRightIcon, ud as unsafeAsEditorBlockValues, ui as ctaRowFragment, ul as getTextColorForBackground, uo as weekStartSchema, ur as formBlockDefinition, us as composeHeaderSectionWrapperClassName, ut as useRichTextEditor, uu as List, va as backgroundAppearanceColorTokenNames, vc as FileAudioIcon, vd as parseBookingLocalDate, vf as GripVertical, vi as MQ_MD_UP, vl as themeButtonClassName, vn as AMBIENT_BACKGROUND_ROLES$1, vo as eventBlockKindValues, vr as resolveEventRequiresPayment, vs as ACCORDION_TRIGGER_FONT_SCALE, vu as DialogFooter, wc as MinusIcon, wd as publicEventPricingCurrency, wf as FileArchive, wi as boxStylesTransforms, wl as DEFAULT_SURFACE_TEXT_COLOR, wn as useDndContext, wo as normalizeEventStaffMemberId, wr as buildGiftingInteractiveIslandProps, ws as FEATURE_CARD_GENERATED_ICON_SIZE_PX, wu as Content, x as PreviewThemeOverlayProvider, xa as parseBackgroundAppearanceColorToken, xc as InfoIcon, xd as toScheduledBookingDateTime, xf as FileSpreadsheet, xi as MQ_TABLET_ONLY, xl as mergeStyles, xn as PointerSensor, xo as normalizeEventBlockKind, xr as getStepNumber$1, xs as ICON_SIZE_PX, xt as EntryControllerProvider, xu as Collapsible, y as PreviewDesignCoordinatorProvider, ya as backgroundAppearanceQuickColorTokenNames, yc as FileSpreadsheetIcon, yd as resolveBookingTimeZoneId, yf as File, yi as MQ_SM_DOWN, yl as backgroundColorStyle, yn as DndContext, yo as eventScheduleScopeValues, yr as resolveRegistrationTarget, ys as ACCORDION_TRIGGER_LETTER_SPACING, yt as useUISelector, yu as DialogHeader, za as isOfferingsPreviewSourceKey, zc as resolveImageUrlWithContext, zd as unsafeAsPassId, zf as ChevronDown, zi as designRuntimeRulesForTheme, zl as FieldFrame, zn as siteHeaderManifest, zo as formatDate$3, zr as buildProductDetailDisplay, zs as parseGeneratedIconSetId, zt as createSnapshotFromPageRecord, zu as __assign } from "./SiteChromeCustomizeContext-DOSDLCiJ.mjs";
3
+ import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-kkmjklLG.mjs";
4
+ import { _ as API_ENDPOINTS, a as usePreviewToken, c as createBearerAPIClient, d as unwrapResponse, g as resolveSurfaceDocumentAttributes, h as SURFACE_IDS, i as usePreviewAuthFetch, l as ApiEnvelopeError, m as SURFACE_DOCUMENT_DATA_ATTRIBUTE, n as markPreviewAuthExpired, o as isPreviewRuntimeSessionEditable, r as usePreviewAuth, s as ApiRequestError, t as initPreviewAuth, u as extractApiEnvelopeErrorDetails } from "./previewAuthStore-BkT1D06A.mjs";
5
5
  import * as React$1 from "react";
6
6
  import React, { Children, Component, Fragment, cloneElement, createContext, createElement, createRef, forwardRef, isValidElement, memo, startTransition, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1280,7 +1280,7 @@ var BlockApiError = class extends Error {
1280
1280
  this.name = "BlockApiError";
1281
1281
  }
1282
1282
  };
1283
- function isRecord$20(value) {
1283
+ function isRecord$19(value) {
1284
1284
  return typeof value === "object" && value !== null;
1285
1285
  }
1286
1286
  function isJsonResponseContentType(contentType) {
@@ -1304,8 +1304,8 @@ async function parseJsonBody(response) {
1304
1304
  }
1305
1305
  }
1306
1306
  function getBlockApiErrorDetails(data) {
1307
- if (!isRecord$20(data)) return {};
1308
- const nestedError = isRecord$20(data.error) ? data.error : void 0;
1307
+ if (!isRecord$19(data)) return {};
1308
+ const nestedError = isRecord$19(data.error) ? data.error : void 0;
1309
1309
  return {
1310
1310
  message: typeof nestedError?.message === "string" ? nestedError.message : typeof data.message === "string" ? data.message : void 0,
1311
1311
  code: typeof nestedError?.code === "string" ? nestedError.code : typeof data.code === "string" ? data.code : void 0
@@ -2737,7 +2737,7 @@ function resolveButtonAffordance(input) {
2737
2737
  function coerceRichTextDoc(value) {
2738
2738
  const raw = unwrapRichTextRoot(value);
2739
2739
  if (typeof raw === "string") return createRichTextDocFromMarkdown(raw);
2740
- if (isRecord$21(raw) && typeof raw.type === "string") return raw;
2740
+ if (isRecord$20(raw) && typeof raw.type === "string") return raw;
2741
2741
  return null;
2742
2742
  }
2743
2743
  //#endregion
@@ -2822,7 +2822,7 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
2822
2822
  return null;
2823
2823
  }
2824
2824
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
2825
- const resolvedVariantId = parseThemeButtonVariantId(variantId);
2825
+ const resolvedVariantId = parseThemeButtonVariantId(canonicalizePersistedBlockButtonRole(variantId));
2826
2826
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
2827
2827
  variant: resolvedVariantId,
2828
2828
  size,
@@ -2881,7 +2881,7 @@ const IconNode = ({ value, title, className, blockId: _blockId, blockKind: _bloc
2881
2881
  };
2882
2882
  //#endregion
2883
2883
  //#region ../blocks/src/system/icons/generatedAssets.ts
2884
- function isRecord$19(value) {
2884
+ function isRecord$18(value) {
2885
2885
  return typeof value === "object" && value !== null && !Array.isArray(value);
2886
2886
  }
2887
2887
  function generatedIconAssetRefKey(ref) {
@@ -2891,11 +2891,11 @@ function collectGeneratedIconAssetRefs(page) {
2891
2891
  const blocks = [];
2892
2892
  for (const block of page.blocks) {
2893
2893
  if (block.kind !== "block.feature-cards" || typeof block.id !== "string") continue;
2894
- const content = isRecord$19(block.draftContent) ? block.draftContent : isRecord$19(block.content) ? block.content : null;
2894
+ const content = isRecord$18(block.draftContent) ? block.draftContent : isRecord$18(block.content) ? block.content : null;
2895
2895
  const cards = Array.isArray(content?.cards) ? content.cards : [];
2896
2896
  const refs = /* @__PURE__ */ new Map();
2897
2897
  for (const card of cards) {
2898
- if (!isRecord$19(card)) continue;
2898
+ if (!isRecord$18(card)) continue;
2899
2899
  const icon = parseBlockIconValue(card.icon);
2900
2900
  if (icon.kind !== "generated") continue;
2901
2901
  const ref = {
@@ -3017,12 +3017,6 @@ const MediaNodeServer = ({ value, className, style, videoPlayback = "inline", lo
3017
3017
  };
3018
3018
  //#endregion
3019
3019
  //#region ../blocks/src/system/runtime/nodes/file-download.tsx
3020
- const FILE_DOWNLOAD_BUTTON_VARIANTS = [
3021
- "primary",
3022
- "secondary",
3023
- "outline",
3024
- "link"
3025
- ];
3026
3020
  function isDownloadableMediaType(type) {
3027
3021
  return typeof type === "string" && PUBLIC_DOWNLOAD_MEDIA_TYPES.includes(type);
3028
3022
  }
@@ -3054,7 +3048,7 @@ function iconForMediaType(type) {
3054
3048
  }
3055
3049
  }
3056
3050
  function normalizeButtonVariant(value) {
3057
- return typeof value === "string" && FILE_DOWNLOAD_BUTTON_VARIANTS.includes(value) ? value : "primary";
3051
+ return isBlockButtonRole(value) ? value : "primary";
3058
3052
  }
3059
3053
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
3060
3054
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -3932,12 +3926,12 @@ function resolveBookingSiteId(siteId, form) {
3932
3926
  return siteId || form?.siteId || "";
3933
3927
  }
3934
3928
  function normalizeBookingFormConfig(form) {
3935
- if (!isRecord$18(form)) return null;
3929
+ if (!isRecord$17(form)) return null;
3936
3930
  const id = readNonEmptyString(form.id);
3937
3931
  const name = readNonEmptyString(form.name);
3938
3932
  if (!id || !name) return null;
3939
- const schemaSource = isRecord$18(form.schema) ? form.schema : isRecord$18(form.schemaJson) ? form.schemaJson : null;
3940
- const settingsSource = isRecord$18(form.settings) ? form.settings : isRecord$18(form.settingsJson) ? form.settingsJson : null;
3933
+ const schemaSource = isRecord$17(form.schema) ? form.schema : isRecord$17(form.schemaJson) ? form.schemaJson : null;
3934
+ const settingsSource = isRecord$17(form.settings) ? form.settings : isRecord$17(form.settingsJson) ? form.settingsJson : null;
3941
3935
  return {
3942
3936
  id,
3943
3937
  name,
@@ -3957,8 +3951,8 @@ function normalizeBookingServices(services) {
3957
3951
  };
3958
3952
  if (!services) return [];
3959
3953
  if (Array.isArray(services)) return services.filter(isBookingFormService).map(normalizeService);
3960
- if (isRecord$18(services) && "services" in services) return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
3961
- return isRecord$18(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
3954
+ if (isRecord$17(services) && "services" in services) return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
3955
+ return isRecord$17(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
3962
3956
  }
3963
3957
  function normalizeBookingSchema(value) {
3964
3958
  if (!value) return void 0;
@@ -3969,7 +3963,7 @@ function normalizeBookingSchema(value) {
3969
3963
  };
3970
3964
  }
3971
3965
  function readBookingFormField(value) {
3972
- if (!isRecord$18(value)) return null;
3966
+ if (!isRecord$17(value)) return null;
3973
3967
  const id = readNonEmptyString(value.id);
3974
3968
  const label = readNonEmptyString(value.label);
3975
3969
  const type = readBookingFieldType(value.type);
@@ -4013,7 +4007,7 @@ function readBookingFieldOptions(value) {
4013
4007
  return options.length > 0 ? options : void 0;
4014
4008
  }
4015
4009
  function readBookingFieldOption(value) {
4016
- if (!isRecord$18(value)) return null;
4010
+ if (!isRecord$17(value)) return null;
4017
4011
  const optionValue = readNonEmptyString(value.value);
4018
4012
  const label = readNonEmptyString(value.label);
4019
4013
  return optionValue && label ? {
@@ -4033,7 +4027,7 @@ function normalizeBookingSettings(value) {
4033
4027
  };
4034
4028
  }
4035
4029
  function isBookingFormService(value) {
4036
- return isRecord$18(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
4030
+ return isRecord$17(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
4037
4031
  }
4038
4032
  function collectBookingCustomFields(data) {
4039
4033
  const customFields = {};
@@ -4083,7 +4077,7 @@ function readStringArray(value) {
4083
4077
  const strings = value.filter((item) => typeof item === "string");
4084
4078
  return strings.length > 0 ? strings : void 0;
4085
4079
  }
4086
- function isRecord$18(value) {
4080
+ function isRecord$17(value) {
4087
4081
  return typeof value === "object" && value !== null;
4088
4082
  }
4089
4083
  function getBookingServicePaymentSelectionMode(service) {
@@ -5653,8 +5647,11 @@ function LocationMapView({ addressText, location, zoom, heightPx, showAddressTex
5653
5647
  href: directionsUrl,
5654
5648
  target: "_blank",
5655
5649
  rel: "noreferrer",
5656
- className: "rb-inline-flex rb-w-fit rb-items-center rb-justify-center rb-rounded-md rb-border rb-px-4 rb-py-2 rb-text-sm rb-font-medium rb-no-underline transition-theme-standard rb-hover-opacity-90",
5657
- style: mergeStyles(borderColorStyle("border"), backgroundColorStyle("surface"), textColorStyle("text")),
5650
+ className: themeButtonClassName({
5651
+ variant: "ghost",
5652
+ size: "sm",
5653
+ extraClassName: "rb-w-fit"
5654
+ }),
5658
5655
  children: directionsLabel
5659
5656
  }) : null
5660
5657
  ]
@@ -7375,7 +7372,11 @@ function WeeklySlotAvailabilityView({ availability, loading = false, error, empt
7375
7372
  ]
7376
7373
  }),
7377
7374
  resolvedCtaUrl ? /* @__PURE__ */ jsx("a", {
7378
- className: "weekly-slot-availability__cta",
7375
+ className: themeButtonClassName({
7376
+ variant: "ghost",
7377
+ size: "sm",
7378
+ extraClassName: "weekly-slot-availability__cta"
7379
+ }),
7379
7380
  href: buildSlotCtaUrl(resolvedCtaUrl, slot),
7380
7381
  "aria-label": buildSlotCtaLabel(resolvedCtaText, slot),
7381
7382
  children: resolvedCtaText
@@ -18732,7 +18733,7 @@ function resolveHasCoursePayment(pricing) {
18732
18733
  if (pricing.selectedOption) return pricing.selectedRequiresPayment;
18733
18734
  return pricing.hasPaidSelection;
18734
18735
  }
18735
- function useCourseRegistrationWizard(props) {
18736
+ function useCourseRegistrationWizard(props, options = {}) {
18736
18737
  const api = useBlockApi();
18737
18738
  const { contentEntry, courses, entrySubrouteContext, subject } = props;
18738
18739
  const scopedCourses = useMemo(() => {
@@ -18979,21 +18980,34 @@ function useCourseRegistrationWizard(props) {
18979
18980
  setStep("enter-details");
18980
18981
  };
18981
18982
  const handleSubmit = async () => {
18982
- if (!selectedCourse) return;
18983
- if (!handleValidateForm()) return;
18983
+ if (!selectedCourse) return {
18984
+ kind: "blocked",
18985
+ message: "Choose an available set of dates to continue."
18986
+ };
18987
+ if (!handleValidateForm()) return { kind: "validation-failed" };
18984
18988
  if (missingPricingSelectionMessage) {
18985
18989
  setErrorMessage(missingPricingSelectionMessage);
18986
18990
  setStep("error");
18987
- return;
18991
+ return {
18992
+ kind: "blocked",
18993
+ message: missingPricingSelectionMessage
18994
+ };
18988
18995
  }
18989
18996
  const requiresPayment = selectedCoursePricing?.selectedRequiresPayment ?? false;
18990
18997
  const canUseMembership = requiresPayment && selectedCourse.acceptsMemberships && portalAuthState === "authenticated" && eligibleMemberships.length > 0;
18991
18998
  if (showSpamProtection && !altchaSolution) {
18992
- setErrorMessage("Please complete the verification check.");
18999
+ const message = "Please complete the verification check.";
19000
+ setErrorMessage(message);
18993
19001
  setStep("error");
18994
- return;
19002
+ return {
19003
+ kind: "blocked",
19004
+ message
19005
+ };
18995
19006
  }
18996
- if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return;
19007
+ if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return {
19008
+ kind: "blocked",
19009
+ message: courseEligibility.reason ?? "This course is fully booked."
19010
+ };
18997
19011
  if (courseEligibility?.canJoinWaitlist) {
18998
19012
  setStep("submitting");
18999
19013
  try {
@@ -19014,15 +19028,20 @@ function useCourseRegistrationWizard(props) {
19014
19028
  usedMembership: false
19015
19029
  });
19016
19030
  setStep(result.status === "waitlist" ? "waitlist" : "success");
19031
+ return { kind: "state-updated" };
19017
19032
  } catch (error) {
19018
- setErrorMessage(error instanceof Error ? error.message : "Booking failed");
19033
+ const message = error instanceof Error ? error.message : "Booking failed";
19034
+ setErrorMessage(message);
19019
19035
  setStep("error");
19036
+ return {
19037
+ kind: "failed",
19038
+ message
19039
+ };
19020
19040
  }
19021
- return;
19022
19041
  }
19023
19042
  if (requiresPayment && canUseMembership) {
19024
19043
  setStep("select-payment");
19025
- return;
19044
+ return { kind: "state-updated" };
19026
19045
  }
19027
19046
  if (requiresPayment) {
19028
19047
  setStep("submitting");
@@ -19048,16 +19067,24 @@ function useCourseRegistrationWizard(props) {
19048
19067
  usedMembership: false
19049
19068
  });
19050
19069
  setStep("success");
19051
- return;
19070
+ return { kind: "state-updated" };
19052
19071
  }
19053
19072
  if (!checkoutResult.checkoutUrl) throw new Error("Checkout URL missing");
19054
19073
  setStep("redirecting");
19055
- window.location.href = checkoutResult.checkoutUrl;
19056
- return;
19074
+ if (options.onCheckoutRedirect) options.onCheckoutRedirect(checkoutResult.checkoutUrl);
19075
+ else window.location.href = checkoutResult.checkoutUrl;
19076
+ return {
19077
+ kind: "checkout-redirect",
19078
+ checkoutUrl: checkoutResult.checkoutUrl
19079
+ };
19057
19080
  } catch (error) {
19058
- setErrorMessage(error instanceof Error ? error.message : "Checkout failed");
19081
+ const message = error instanceof Error ? error.message : "Checkout failed";
19082
+ setErrorMessage(message);
19059
19083
  setStep("error");
19060
- return;
19084
+ return {
19085
+ kind: "failed",
19086
+ message
19087
+ };
19061
19088
  }
19062
19089
  }
19063
19090
  setStep("submitting");
@@ -19079,35 +19106,58 @@ function useCourseRegistrationWizard(props) {
19079
19106
  usedMembership: result.paymentMethod === "membership"
19080
19107
  });
19081
19108
  setStep(result.status === "waitlist" ? "waitlist" : "success");
19109
+ return { kind: "state-updated" };
19082
19110
  } catch (error) {
19083
- setErrorMessage(error instanceof Error ? error.message : "Booking failed");
19111
+ const message = error instanceof Error ? error.message : "Booking failed";
19112
+ setErrorMessage(message);
19084
19113
  setStep("error");
19114
+ return {
19115
+ kind: "failed",
19116
+ message
19117
+ };
19085
19118
  }
19086
19119
  };
19087
19120
  const handlePaymentContinue = async () => {
19088
- if (!selectedCourse) return;
19089
- if (!handleValidateForm()) return;
19121
+ if (!selectedCourse) return {
19122
+ kind: "blocked",
19123
+ message: "Choose an available set of dates to continue."
19124
+ };
19125
+ if (!handleValidateForm()) return { kind: "validation-failed" };
19090
19126
  if (missingPricingSelectionMessage) {
19091
19127
  setErrorMessage(missingPricingSelectionMessage);
19092
19128
  setStep("error");
19093
- return;
19129
+ return {
19130
+ kind: "blocked",
19131
+ message: missingPricingSelectionMessage
19132
+ };
19094
19133
  }
19095
19134
  const requiresPayment = selectedCoursePricing?.selectedRequiresPayment ?? false;
19096
- if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return;
19135
+ if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return {
19136
+ kind: "blocked",
19137
+ message: courseEligibility.reason ?? "This course is fully booked."
19138
+ };
19097
19139
  if (!requiresPayment) {
19098
19140
  setStep("enter-details");
19099
- return;
19141
+ return { kind: "state-updated" };
19100
19142
  }
19101
19143
  if (showSpamProtection && !altchaSolution) {
19102
- setErrorMessage("Please complete the verification check.");
19144
+ const message = "Please complete the verification check.";
19145
+ setErrorMessage(message);
19103
19146
  setStep("error");
19104
- return;
19147
+ return {
19148
+ kind: "blocked",
19149
+ message
19150
+ };
19105
19151
  }
19106
19152
  if (paymentChoice === "membership") {
19107
19153
  if (!selectedMembershipId) {
19108
- setErrorMessage("Select a membership to enroll.");
19154
+ const message = "Select a membership to sign up.";
19155
+ setErrorMessage(message);
19109
19156
  setStep("error");
19110
- return;
19157
+ return {
19158
+ kind: "blocked",
19159
+ message
19160
+ };
19111
19161
  }
19112
19162
  setStep("submitting");
19113
19163
  try {
@@ -19129,11 +19179,16 @@ function useCourseRegistrationWizard(props) {
19129
19179
  usedMembership: true
19130
19180
  });
19131
19181
  setStep(result.status === "waitlist" ? "waitlist" : "success");
19182
+ return { kind: "state-updated" };
19132
19183
  } catch (error) {
19133
- setErrorMessage(error instanceof Error ? error.message : "Booking failed");
19184
+ const message = error instanceof Error ? error.message : "Booking failed";
19185
+ setErrorMessage(message);
19134
19186
  setStep("error");
19187
+ return {
19188
+ kind: "failed",
19189
+ message
19190
+ };
19135
19191
  }
19136
- return;
19137
19192
  }
19138
19193
  setStep("submitting");
19139
19194
  try {
@@ -19158,14 +19213,24 @@ function useCourseRegistrationWizard(props) {
19158
19213
  usedMembership: false
19159
19214
  });
19160
19215
  setStep("success");
19161
- return;
19216
+ return { kind: "state-updated" };
19162
19217
  }
19163
19218
  if (!checkoutResult.checkoutUrl) throw new Error("Checkout URL missing");
19164
19219
  setStep("redirecting");
19165
- window.location.href = checkoutResult.checkoutUrl;
19220
+ if (options.onCheckoutRedirect) options.onCheckoutRedirect(checkoutResult.checkoutUrl);
19221
+ else window.location.href = checkoutResult.checkoutUrl;
19222
+ return {
19223
+ kind: "checkout-redirect",
19224
+ checkoutUrl: checkoutResult.checkoutUrl
19225
+ };
19166
19226
  } catch (error) {
19167
- setErrorMessage(error instanceof Error ? error.message : "Checkout failed");
19227
+ const message = error instanceof Error ? error.message : "Checkout failed";
19228
+ setErrorMessage(message);
19168
19229
  setStep("error");
19230
+ return {
19231
+ kind: "failed",
19232
+ message
19233
+ };
19169
19234
  }
19170
19235
  };
19171
19236
  const handleRetry = () => {
@@ -20084,7 +20149,7 @@ const LEAFLET_JS_INTEGRITY = "sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo
20084
20149
  let leafletLoaded = false;
20085
20150
  let leafletLoadPromise = null;
20086
20151
  function isLeafletApi(value) {
20087
- if (!isRecord$21(value)) return false;
20152
+ if (!isRecord$20(value)) return false;
20088
20153
  return typeof value.map === "function" && typeof value.tileLayer === "function" && typeof value.marker === "function";
20089
20154
  }
20090
20155
  function loadLeaflet() {
@@ -21406,7 +21471,7 @@ Autoplay.globalOptions = void 0;
21406
21471
  function isObject$2(subject) {
21407
21472
  return Object.prototype.toString.call(subject) === "[object Object]";
21408
21473
  }
21409
- function isRecord$17(subject) {
21474
+ function isRecord$16(subject) {
21410
21475
  return isObject$2(subject) || Array.isArray(subject);
21411
21476
  }
21412
21477
  function canUseDOM() {
@@ -21421,7 +21486,7 @@ function areOptionsEqual(optionsA, optionsB) {
21421
21486
  const valueA = optionsA[key];
21422
21487
  const valueB = optionsB[key];
21423
21488
  if (typeof valueA === "function") return `${valueA}` === `${valueB}`;
21424
- if (!isRecord$17(valueA) || !isRecord$17(valueB)) return valueA === valueB;
21489
+ if (!isRecord$16(valueA) || !isRecord$16(valueB)) return valueA === valueB;
21425
21490
  return areOptionsEqual(valueA, valueB);
21426
21491
  });
21427
21492
  }
@@ -27978,7 +28043,7 @@ function WeeklySlotAvailabilityClient({ serviceId, resourceId, horizonWeeks, tim
27978
28043
  }
27979
28044
  //#endregion
27980
28045
  //#region ../blocks/src/system/runtime/components/registry.client.tsx
27981
- function isRecord$16(value) {
28046
+ function isRecord$15(value) {
27982
28047
  return typeof value === "object" && value !== null;
27983
28048
  }
27984
28049
  function buildRenderFromLooseProps(runtime, mode, props) {
@@ -27997,12 +28062,12 @@ function withRuntimeBackedEnvelope(source, runtime, render) {
27997
28062
  function normalizeLegacyInteractiveRenderProps(runtime, mode, props) {
27998
28063
  const source = props;
27999
28064
  const render = props["render"];
28000
- if (!isRecord$16(render)) return withRuntimeBackedEnvelope(source, runtime, buildRenderFromLooseProps(runtime, mode, props));
28001
- if (isRecord$16(render["hydration"])) return withRuntimeBackedEnvelope(source, runtime, {
28065
+ if (!isRecord$15(render)) return withRuntimeBackedEnvelope(source, runtime, buildRenderFromLooseProps(runtime, mode, props));
28066
+ if (isRecord$15(render["hydration"])) return withRuntimeBackedEnvelope(source, runtime, {
28002
28067
  ...render,
28003
28068
  mode
28004
28069
  });
28005
- if (!isRecord$16(render["display"])) return withRuntimeBackedEnvelope(source, runtime, buildRenderFromLooseProps(runtime, mode, props));
28070
+ if (!isRecord$15(render["display"])) return withRuntimeBackedEnvelope(source, runtime, buildRenderFromLooseProps(runtime, mode, props));
28006
28071
  const { display, mode: _legacyMode, ...legacyHydration } = render;
28007
28072
  return withRuntimeBackedEnvelope(source, runtime, {
28008
28073
  display,
@@ -28219,9 +28284,9 @@ function appendBackgroundMediaClasses(baseClassName, input) {
28219
28284
  ].filter(Boolean).join(" ");
28220
28285
  }
28221
28286
  function gradientPresetCss(value) {
28222
- if (!isString$1(value)) return null;
28223
- const preset = GRADIENT_PRESETS.find((candidate) => candidate.id === value.trim());
28224
- if (!preset) return null;
28287
+ const presetId = parseGradientPresetId(value);
28288
+ if (!presetId) return null;
28289
+ const preset = getGradientPreset(presetId);
28225
28290
  return gradientToCss(preset, Object.fromEntries(preset.stops.map((stop) => [stop.color, `rgb(var(--tb-${stop.color}))`])));
28226
28291
  }
28227
28292
  const backgroundTransforms = [
@@ -28549,7 +28614,7 @@ const defaultTransforms = createTransformRegistry([
28549
28614
  //#region ../blocks/src/system/data/linkedContentEntries.ts
28550
28615
  const LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
28551
28616
  function coerceLinkedContentEntriesPayload(payload) {
28552
- if (!isRecord$15(payload)) return payload;
28617
+ if (!isRecord$14(payload)) return payload;
28553
28618
  const response = payload;
28554
28619
  if (!Array.isArray(response.entries)) return payload;
28555
28620
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -28557,16 +28622,16 @@ function coerceLinkedContentEntriesPayload(payload) {
28557
28622
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
28558
28623
  }
28559
28624
  function getLinkedContentEntryMeta(value) {
28560
- if (!isRecord$15(value)) return null;
28625
+ if (!isRecord$14(value)) return null;
28561
28626
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
28562
28627
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
28563
28628
  }
28564
28629
  function buildLinkedContentEditTarget(input) {
28565
28630
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
28566
- if (!isRecord$15(entry)) return null;
28631
+ if (!isRecord$14(entry)) return null;
28567
28632
  const meta = getLinkedContentEntryMeta(entry);
28568
28633
  if (!meta || meta.support.kind !== "supported") return null;
28569
- const content = isRecord$15(entry.content) ? entry.content : {};
28634
+ const content = isRecord$14(entry.content) ? entry.content : {};
28570
28635
  return {
28571
28636
  kind: "linked-content-entry",
28572
28637
  entryId: meta.entryId,
@@ -28630,12 +28695,12 @@ function resolveLinkedEntryInlineFieldEligibility(input) {
28630
28695
  };
28631
28696
  }
28632
28697
  function enrichLinkedContentEntry(entry, contentType) {
28633
- if (!isRecord$15(entry)) return entry;
28698
+ if (!isRecord$14(entry)) return entry;
28634
28699
  const entryId = typeof entry.id === "string" ? entry.id : null;
28635
28700
  if (!entryId) return entry;
28636
28701
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
28637
28702
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
28638
- const content = isRecord$15(entry.content) ? entry.content : {};
28703
+ const content = isRecord$14(entry.content) ? entry.content : {};
28639
28704
  const meta = {
28640
28705
  kind: "linked-content-entry",
28641
28706
  entryId,
@@ -28731,7 +28796,7 @@ function capitalize(value) {
28731
28796
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
28732
28797
  }
28733
28798
  function parsePublicContentTypeMeta(value) {
28734
- if (!isRecord$15(value)) return null;
28799
+ if (!isRecord$14(value)) return null;
28735
28800
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
28736
28801
  return {
28737
28802
  key: value.key,
@@ -28741,7 +28806,7 @@ function parsePublicContentTypeMeta(value) {
28741
28806
  };
28742
28807
  }
28743
28808
  function parsePublicContentTypeLinkedEntryEditing(value) {
28744
- if (!isRecord$15(value) || typeof value.kind !== "string") return null;
28809
+ if (!isRecord$14(value) || typeof value.kind !== "string") return null;
28745
28810
  switch (value.kind) {
28746
28811
  case "generic": return { kind: "generic" };
28747
28812
  case "unsupported-domain-backed": return {
@@ -28752,7 +28817,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
28752
28817
  }
28753
28818
  }
28754
28819
  function parsePublicContentTypeFieldMeta(value) {
28755
- if (!isRecord$15(value)) return [];
28820
+ if (!isRecord$14(value)) return [];
28756
28821
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
28757
28822
  return [{
28758
28823
  id: value.id,
@@ -28767,14 +28832,14 @@ function parseStringArray(value) {
28767
28832
  return value.filter((item) => typeof item === "string");
28768
28833
  }
28769
28834
  function isLinkedContentEntryMeta(value) {
28770
- if (!isRecord$15(value)) return false;
28835
+ if (!isRecord$14(value)) return false;
28771
28836
  if (value.kind !== "linked-content-entry") return false;
28772
28837
  if (typeof value.entryId !== "string") return false;
28773
28838
  if (typeof value.contentTypeKey !== "string") return false;
28774
28839
  if (typeof value.contentTypeLabel !== "string") return false;
28775
28840
  if (typeof value.title !== "string") return false;
28776
28841
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
28777
- if (!isRecord$15(value.contentType)) return false;
28842
+ if (!isRecord$14(value.contentType)) return false;
28778
28843
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
28779
28844
  return isLinkedContentEditSupport(value.support);
28780
28845
  }
@@ -28782,7 +28847,7 @@ function isLinkedEntryFieldSourceArray(value) {
28782
28847
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
28783
28848
  }
28784
28849
  function isLinkedEntryFieldSource(value) {
28785
- if (!isRecord$15(value)) return false;
28850
+ if (!isRecord$14(value)) return false;
28786
28851
  if (typeof value.displayPath !== "string") return false;
28787
28852
  switch (value.kind) {
28788
28853
  case "content-field": return typeof value.fieldPath === "string" && (value.fieldType === "text" || value.fieldType === "richText");
@@ -28803,7 +28868,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
28803
28868
  }
28804
28869
  }
28805
28870
  function isLinkedContentEditSupport(value) {
28806
- if (!isRecord$15(value) || typeof value.kind !== "string") return false;
28871
+ if (!isRecord$14(value) || typeof value.kind !== "string") return false;
28807
28872
  switch (value.kind) {
28808
28873
  case "supported": return true;
28809
28874
  case "unsupported-domain-backed":
@@ -28812,7 +28877,7 @@ function isLinkedContentEditSupport(value) {
28812
28877
  default: return false;
28813
28878
  }
28814
28879
  }
28815
- function isRecord$15(value) {
28880
+ function isRecord$14(value) {
28816
28881
  return typeof value === "object" && value !== null && !Array.isArray(value);
28817
28882
  }
28818
28883
  //#endregion
@@ -28866,14 +28931,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
28866
28931
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
28867
28932
  }
28868
28933
  function readVariant(blockContent) {
28869
- if (!isRecord$14(blockContent)) return void 0;
28934
+ if (!isRecord$13(blockContent)) return void 0;
28870
28935
  const variant = blockContent.variant;
28871
28936
  return typeof variant === "string" ? variant : void 0;
28872
28937
  }
28873
28938
  function isFaqDecoratedVariant(variant) {
28874
28939
  return variant === "default" || variant === "question-columns";
28875
28940
  }
28876
- function isRecord$14(value) {
28941
+ function isRecord$13(value) {
28877
28942
  return typeof value === "object" && value !== null && !Array.isArray(value);
28878
28943
  }
28879
28944
  function buildHeadingDecorationWrapperClassName(className) {
@@ -29943,7 +30008,7 @@ function applyStyleOverride(target, key, defaults) {
29943
30008
  //#endregion
29944
30009
  //#region ../blocks/src/system/runtime/blockComposition.ts
29945
30010
  function readBlockComposition(value) {
29946
- if (!isRecord$13(value) || typeof value.kind !== "string") return null;
30011
+ if (!isRecord$12(value) || typeof value.kind !== "string") return null;
29947
30012
  switch (value.kind) {
29948
30013
  case "intro": return value.treatment === "editorial-statement" || value.treatment === "portrait-bio" ? {
29949
30014
  kind: "intro",
@@ -29956,7 +30021,7 @@ function readBlockComposition(value) {
29956
30021
  default: return null;
29957
30022
  }
29958
30023
  }
29959
- function isRecord$13(value) {
30024
+ function isRecord$12(value) {
29960
30025
  return typeof value === "object" && value !== null && !Array.isArray(value);
29961
30026
  }
29962
30027
  //#endregion
@@ -33396,6 +33461,8 @@ function buildThemeCssVars(theme) {
33396
33461
  const inputRadius = mapInputRadius(inputSystem.base.corners, theme.corners);
33397
33462
  return {
33398
33463
  ...generateCssVars(theme.palette),
33464
+ ["--tb-secondaryForeground"]: "var(--tb-onSecondary)",
33465
+ ["--tb-accentForeground"]: "var(--tb-onAccent)",
33399
33466
  ["--tb-scrim"]: "0 0 0",
33400
33467
  ["--tb-shadow"]: "0 0 0",
33401
33468
  ...generateShadowCssVars(theme),
@@ -33862,7 +33929,7 @@ function hydrateValue(value, context) {
33862
33929
  const resolvedItems = value.map((item) => hydrateValue(item, context));
33863
33930
  return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
33864
33931
  }
33865
- if (isRecord$21(value)) {
33932
+ if (isRecord$20(value)) {
33866
33933
  if (isInternalLink(value)) return hydrateInternalLink(value, context.routes);
33867
33934
  if (isPageLink(value)) return hydratePageLink(value, context);
33868
33935
  if (isEntryLink(value)) return hydrateEntryLink(value, context);
@@ -42052,6 +42119,11 @@ const containerResponsiveThemeCss = `/*
42052
42119
  flex-wrap: wrap;
42053
42120
  }
42054
42121
 
42122
+ /* Text-style CTA actions belong to the section foreground contract. */
42123
+ :where(.theme-scope) [data-block="cta-full"] .cta-row .button-link {
42124
+ color: var(--rb-surface-link-color, var(--rb-surface-text-color, rgb(var(--tb-primary))));
42125
+ }
42126
+
42055
42127
  /* =============================================================================
42056
42128
  * Block: Body Text (content block, Phase 2)
42057
42129
  *
@@ -48281,6 +48353,26 @@ function stripEmptyStringValues(params) {
48281
48353
  function ensureSiteId(params, context) {
48282
48354
  if (!params.siteId && typeof context.siteId === "string" && context.siteId) params.siteId = context.siteId;
48283
48355
  }
48356
+ /**
48357
+ * Map the embed block's author-facing order values onto the public
48358
+ * `listPublishedEntries` `order` contract enum.
48359
+ *
48360
+ * `'order'` ("Custom order field") is the MANUAL-ORDERING axis: it means "render
48361
+ * entries in the content type's author-defined order". It intentionally maps to
48362
+ * `undefined` (endpoint default) here rather than a fixed `manual.asc`, because
48363
+ * this transform is schema-blind — it can't tell whether the embedded content
48364
+ * type actually opts into `ordering.mode: 'manual'`. Forcing `manual.asc` for a
48365
+ * non-manual type would silently flip its default sort (all `manualOrder` values
48366
+ * are equal, so it would degrade to createdAt-asc) — a render regression.
48367
+ *
48368
+ * The manual-ordering HONOR therefore lives server-side where the schema IS
48369
+ * known: `listContentEntries` (content/entries/list.ts) applies `manualOrder ASC`
48370
+ * as the default for manual-ordered types (plan 8.3). That is the path
48371
+ * `block-loaders/content.ts` renders through. The embed/`listPublishedEntries`
48372
+ * loader path (contentEntryLoaders) is not yet schema-aware for its default
48373
+ * ordering; honoring manual order there for the default `'order'` value is a
48374
+ * bounded follow-up (recorded in plan 8.3), not this change.
48375
+ */
48284
48376
  function normalizeOrder(orderBy) {
48285
48377
  switch (orderBy) {
48286
48378
  case "newest": return "published_at.desc";
@@ -55965,7 +56057,8 @@ function validateRelativeStoragePath(value) {
55965
56057
  if (value.startsWith("sites/")) return fail({ tag: "SITE_SCOPED_PATH" });
55966
56058
  if (value.startsWith("/")) return fail({ tag: "LEADING_SLASH" });
55967
56059
  if (value.includes("//")) return fail({ tag: "DOUBLE_SLASH" });
55968
- if (value.split("/").some((segment) => segment === "..")) return fail({ tag: "TRAVERSAL" });
56060
+ if (value.includes("%")) return fail({ tag: "PERCENT_ENCODING" });
56061
+ if (value.split("/").some((segment) => segment === "." || segment === "..")) return fail({ tag: "TRAVERSAL" });
55969
56062
  return ok$1(value);
55970
56063
  }
55971
56064
  function brandRelativeStoragePath(value) {
@@ -55983,7 +56076,7 @@ function assertRelativeStoragePath(value) {
55983
56076
  if (!parsed.ok) throw new Error(`Expected RelativeStoragePath, got ${parsed.error.tag}`);
55984
56077
  return parsed.value;
55985
56078
  }
55986
- function isRecord$12(value) {
56079
+ function isRecord$11(value) {
55987
56080
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
55988
56081
  }
55989
56082
  function parseFileKindJson(value) {
@@ -56204,7 +56297,7 @@ function parseEntitledCustomerAccessScopeJson(value) {
56204
56297
  }
56205
56298
  }
56206
56299
  function requireRecord(value) {
56207
- if (!isRecord$12(value)) return err("expected-object");
56300
+ if (!isRecord$11(value)) return err("expected-object");
56208
56301
  return ok(value);
56209
56302
  }
56210
56303
  function requireString(value) {
@@ -56419,7 +56512,7 @@ const DEFAULT_MESSAGES = {
56419
56512
  update: "Failed to update media asset",
56420
56513
  delete: "Failed to delete media asset"
56421
56514
  };
56422
- function isRecord$11(value) {
56515
+ function isRecord$10(value) {
56423
56516
  return typeof value === "object" && value !== null;
56424
56517
  }
56425
56518
  const normalizeLabels = (labels) => labels !== void 0 && labels.length > 0 ? labels.map((label) => label.trim()).filter((label) => label.length > 0).join(",") : void 0;
@@ -56453,7 +56546,7 @@ const filterUpdatePayload = (input) => {
56453
56546
  return payload;
56454
56547
  };
56455
56548
  const extractErrorMessage = (body) => {
56456
- if (!isRecord$11(body)) return typeof body === "string" && body.trim().length > 0 ? body : null;
56549
+ if (!isRecord$10(body)) return typeof body === "string" && body.trim().length > 0 ? body : null;
56457
56550
  for (const key of [
56458
56551
  "error",
56459
56552
  "message",
@@ -56466,11 +56559,11 @@ const extractErrorMessage = (body) => {
56466
56559
  const details = body.details;
56467
56560
  if (Array.isArray(details)) for (const entry of details) {
56468
56561
  if (typeof entry === "string" && entry.trim().length > 0) return entry;
56469
- if (isRecord$11(entry) && typeof entry.message === "string" && entry.message.trim().length > 0) return entry.message;
56562
+ if (isRecord$10(entry) && typeof entry.message === "string" && entry.message.trim().length > 0) return entry.message;
56470
56563
  }
56471
56564
  const errors = body.errors;
56472
56565
  if (Array.isArray(errors)) {
56473
- for (const entry of errors) if (isRecord$11(entry) && typeof entry.message === "string" && entry.message.trim().length > 0) return entry.message;
56566
+ for (const entry of errors) if (isRecord$10(entry) && typeof entry.message === "string" && entry.message.trim().length > 0) return entry.message;
56474
56567
  }
56475
56568
  return null;
56476
56569
  };
@@ -57163,124 +57256,85 @@ function BackgroundColorField({ path, backend, config }) {
57163
57256
  //#endregion
57164
57257
  //#region ../block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.tsx
57165
57258
  /**
57166
- * BackgroundGradientWidget
57167
- *
57168
57259
  * Select a curated gradient from the theme-based library.
57169
57260
  * Gradients use theme color tokens, so they adapt to the site's palette.
57170
57261
  */
57171
- function BackgroundGradientWidget(props) {
57172
- const { label, value, onChange, description, error, dataPath } = props;
57262
+ function BackgroundGradientWidget({ label, value, onChange, description, error, dataPath }) {
57173
57263
  const { tokens } = usePalette();
57174
- const [showAdvanced, setShowAdvanced] = useState(false);
57175
- const selectedPresetId = useMemo(() => {
57176
- if (!value) return null;
57177
- return GRADIENT_PRESETS.find((p) => p.type === value.type && p.angle === value.angle && p.position === value.position && p.stops.length === value.stops.length && p.stops.every((stop, i) => stop.color === value.stops[i]?.color && stop.position === value.stops[i]?.position))?.id ?? null;
57178
- }, [value]);
57264
+ const selectedPreset = useMemo(() => value ? GRADIENT_PRESETS.find((preset) => gradientConfigsMatch(preset, value)) ?? null : null, [value]);
57179
57265
  const handleSelectPreset = (presetId) => {
57180
- const preset = GRADIENT_PRESETS.find((p) => p.id === presetId);
57181
- if (!preset) return;
57182
- onChange({
57183
- type: preset.type,
57184
- angle: preset.angle,
57185
- position: preset.position,
57186
- stops: preset.stops
57187
- });
57266
+ onChange(gradientConfigFromPreset(getGradientPreset(presetId)));
57188
57267
  };
57189
- return /* @__PURE__ */ jsxs("div", {
57268
+ return /* @__PURE__ */ jsx(FieldFrame, {
57269
+ fieldPath: dataPath,
57270
+ label,
57271
+ description,
57272
+ error,
57190
57273
  className: "space-y-3",
57191
- "data-path": dataPath,
57192
- children: [
57193
- /* @__PURE__ */ jsxs("div", { children: [
57194
- /* @__PURE__ */ jsx(Label, {
57195
- className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground",
57196
- children: label
57197
- }),
57198
- description ? /* @__PURE__ */ jsx("p", {
57199
- className: "text-xs text-muted-foreground mt-1",
57200
- children: description
57201
- }) : null,
57202
- error ? /* @__PURE__ */ jsx("p", {
57203
- className: "text-xs text-destructive mt-1",
57204
- children: error
57205
- }) : null
57206
- ] }),
57207
- /* @__PURE__ */ jsx("div", {
57274
+ children: ({ id, descriptionId, messageId }) => /* @__PURE__ */ jsxs("div", {
57275
+ className: "space-y-3",
57276
+ children: [/* @__PURE__ */ jsx("div", {
57277
+ role: "group",
57278
+ "aria-label": `${label} presets`,
57279
+ "aria-describedby": [descriptionId, messageId].filter(Boolean).join(" ") || void 0,
57208
57280
  className: "grid grid-cols-2 gap-3 sm:grid-cols-3",
57209
- children: GRADIENT_PRESETS.map((preset) => {
57210
- const isSelected = selectedPresetId === preset.id;
57211
- const cssGradient = gradientToCss({
57212
- type: preset.type,
57213
- angle: preset.angle,
57214
- position: preset.position,
57215
- stops: preset.stops
57216
- }, tokens);
57281
+ children: GRADIENT_PRESETS.map((preset, index) => {
57282
+ const isSelected = selectedPreset?.id === preset.id;
57283
+ const cssGradient = gradientToCss(gradientConfigFromPreset(preset), tokens);
57284
+ const kindLabel = gradientKindLabel$1(preset.type);
57217
57285
  return /* @__PURE__ */ jsxs("button", {
57286
+ id: index === 0 ? id : void 0,
57218
57287
  type: "button",
57288
+ "aria-label": `${preset.name}, ${kindLabel} gradient`,
57289
+ "aria-pressed": isSelected,
57219
57290
  onClick: () => handleSelectPreset(preset.id),
57220
- className: cn$1("group flex flex-col gap-2 rounded-md border p-2 transition", isSelected ? "border-foreground bg-accent/30" : "border-muted-foreground/30 bg-background hover:bg-muted/40"),
57221
- children: [/* @__PURE__ */ jsx("div", {
57291
+ className: cn$1("group flex flex-col gap-2 rounded-md border p-2 text-left transition", isSelected ? "border-foreground bg-accent/30" : "border-muted-foreground/30 bg-background hover:bg-muted/40"),
57292
+ children: [/* @__PURE__ */ jsx("span", {
57293
+ "aria-hidden": "true",
57222
57294
  className: "h-16 w-full rounded-sm",
57223
57295
  style: { background: cssGradient }
57224
- }), /* @__PURE__ */ jsx("div", {
57225
- className: "text-xs font-medium text-foreground text-left",
57226
- children: preset.name
57296
+ }), /* @__PURE__ */ jsxs("span", {
57297
+ className: "space-y-0.5",
57298
+ children: [/* @__PURE__ */ jsx("span", {
57299
+ className: "block text-xs font-medium text-foreground",
57300
+ children: preset.name
57301
+ }), /* @__PURE__ */ jsx("span", {
57302
+ className: "block text-[11px] font-medium uppercase tracking-wide text-muted-foreground",
57303
+ children: kindLabel
57304
+ })]
57227
57305
  })]
57228
57306
  }, preset.id);
57229
57307
  })
57230
- }),
57231
- value ? /* @__PURE__ */ jsxs("div", {
57308
+ }), value ? /* @__PURE__ */ jsxs("p", {
57232
57309
  className: "text-xs text-muted-foreground",
57233
- children: ["Selected: ", selectedPresetId ? GRADIENT_PRESETS.find((p) => p.id === selectedPresetId)?.name : "Custom"]
57234
- }) : null,
57235
- /* @__PURE__ */ jsxs("div", {
57236
- className: "border-t border-border/40 pt-3",
57237
- children: [/* @__PURE__ */ jsxs("button", {
57238
- type: "button",
57239
- onClick: () => setShowAdvanced(!showAdvanced),
57240
- className: "flex items-center gap-2 text-xs font-medium text-muted-foreground hover:text-foreground transition",
57241
- children: [showAdvanced ? /* @__PURE__ */ jsx(ChevronUp, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3" }), "Advanced Settings"]
57242
- }), showAdvanced && value ? /* @__PURE__ */ jsxs("div", {
57243
- className: "mt-3 space-y-3 text-xs",
57244
- children: [
57245
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Label, {
57246
- className: "text-xs",
57247
- children: "Type"
57248
- }), /* @__PURE__ */ jsxs("div", {
57249
- className: "mt-1 text-muted-foreground",
57250
- children: [
57251
- value.type === "linear" ? "Linear" : "Radial",
57252
- value.type === "linear" && value.angle !== void 0 ? ` (${value.angle}�)` : "",
57253
- value.type === "radial" && value.position ? ` (${value.position})` : ""
57254
- ]
57255
- })] }),
57256
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Label, {
57257
- className: "text-xs",
57258
- children: "Color Stops"
57259
- }), /* @__PURE__ */ jsx("div", {
57260
- className: "mt-1 space-y-1",
57261
- children: value.stops.map((stop, idx) => /* @__PURE__ */ jsxs("div", {
57262
- className: "flex items-center gap-2 text-muted-foreground",
57263
- children: [
57264
- /* @__PURE__ */ jsx("span", {
57265
- className: "h-3 w-3 rounded-full border border-border/50",
57266
- style: { backgroundColor: tokens[stop.color] ?? "#000000" }
57267
- }),
57268
- /* @__PURE__ */ jsx("span", { children: stop.color }),
57269
- /* @__PURE__ */ jsx("span", { children: "�" }),
57270
- /* @__PURE__ */ jsxs("span", { children: [stop.position, "%"] })
57271
- ]
57272
- }, idx))
57273
- })] }),
57274
- /* @__PURE__ */ jsx("p", {
57275
- className: "text-muted-foreground",
57276
- children: "To customize gradient angles, positions, or add/remove color stops, select a preset as a starting point. Full customization coming soon."
57277
- })
57278
- ]
57279
- }) : null]
57280
- })
57281
- ]
57310
+ "aria-live": "polite",
57311
+ children: ["Selected gradient: ", selectedPreset ? `${selectedPreset.name} · ${gradientKindLabel$1(selectedPreset.type)}` : "Custom"]
57312
+ }) : null]
57313
+ })
57282
57314
  });
57283
57315
  }
57316
+ function gradientConfigFromPreset(preset) {
57317
+ return {
57318
+ type: preset.type,
57319
+ angle: preset.angle,
57320
+ shape: preset.shape,
57321
+ position: preset.position,
57322
+ stops: preset.stops.map((stop) => ({ ...stop }))
57323
+ };
57324
+ }
57325
+ function gradientConfigsMatch(preset, value) {
57326
+ return preset.type === value.type && preset.angle === value.angle && radialShape(preset) === radialShape(value) && preset.position === value.position && preset.stops.length === value.stops.length && preset.stops.every((stop, index) => stop.color === value.stops[index]?.color && stop.position === value.stops[index]?.position);
57327
+ }
57328
+ function radialShape(config) {
57329
+ return config.type === "radial" ? config.shape ?? "circle" : config.shape;
57330
+ }
57331
+ function gradientKindLabel$1(type) {
57332
+ switch (type) {
57333
+ case "linear": return "Linear";
57334
+ case "radial": return "Radial";
57335
+ case "conic": return "Conic";
57336
+ }
57337
+ }
57284
57338
  //#endregion
57285
57339
  //#region ../block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.tsx
57286
57340
  /**
@@ -57318,12 +57372,7 @@ function BackgroundGradientField({ path, backend, config }) {
57318
57372
  function findPresetFromCss(css, tokens) {
57319
57373
  if (!css) return null;
57320
57374
  for (const preset of GRADIENT_PRESETS) {
57321
- const presetConfig = {
57322
- type: preset.type,
57323
- angle: preset.angle,
57324
- position: preset.position,
57325
- stops: preset.stops
57326
- };
57375
+ const presetConfig = gradientConfigFromPreset(preset);
57327
57376
  if (gradientToCss(presetConfig, tokens) === css) return presetConfig;
57328
57377
  }
57329
57378
  return null;
@@ -57375,13 +57424,14 @@ function parseReferenceKind(referenceKind) {
57375
57424
  const ButtonWidgetContext = createContext(null);
57376
57425
  function ButtonWidgetProvider({ buttonSystem, children }) {
57377
57426
  const value = useMemo(() => {
57427
+ const variants = buttonSystem ? buttonSystem.variants.flatMap((variant) => variant.enabled && isBlockButtonRole(variant.id) ? [{
57428
+ id: variant.id,
57429
+ name: variant.name,
57430
+ priority: variant.priority
57431
+ }] : []).sort((a, b) => a.priority - b.priority) : [];
57378
57432
  return {
57379
- variants: buttonSystem ? buttonSystem.variants.filter((v) => v.enabled).map((v) => ({
57380
- id: v.id,
57381
- name: v.name,
57382
- priority: v.priority
57383
- })).sort((a, b) => a.priority - b.priority) : [],
57384
- defaultVariant: buttonSystem?.variants.find((v) => v.priority === 1)?.id ?? null,
57433
+ variants,
57434
+ defaultVariant: variants.find((variant) => variant.priority === 1)?.id ?? variants[0]?.id ?? null,
57385
57435
  buttonSystem
57386
57436
  };
57387
57437
  }, [buttonSystem]);
@@ -57405,23 +57455,11 @@ function useButtonWidgetContext() {
57405
57455
  *
57406
57456
  * Use `ui.widget: 'buttonVariant'` in field definitions to opt into this behavior.
57407
57457
  */
57408
- const DEFAULT_VARIANTS = [
57409
- {
57410
- id: "primary",
57411
- name: "Primary",
57412
- priority: 1
57413
- },
57414
- {
57415
- id: "secondary",
57416
- name: "Secondary",
57417
- priority: 2
57418
- },
57419
- {
57420
- id: "outline",
57421
- name: "Outline",
57422
- priority: 3
57423
- }
57424
- ];
57458
+ const DEFAULT_VARIANTS = BLOCK_BUTTON_ROLE_OPTIONS.map((option, index) => ({
57459
+ id: option.value,
57460
+ name: option.label,
57461
+ priority: index + 1
57462
+ }));
57425
57463
  function ButtonVariantField({ path, backend, config }) {
57426
57464
  const { value, error, setValue } = useField(path, backend);
57427
57465
  const buttonContext = useButtonWidgetContext();
@@ -57435,7 +57473,7 @@ function ButtonVariantField({ path, backend, config }) {
57435
57473
  description: config.description,
57436
57474
  error: error?.message,
57437
57475
  children: () => /* @__PURE__ */ jsxs(Select, {
57438
- value: typeof value === "string" && value !== "" ? value : void 0,
57476
+ value: value !== "" ? value : void 0,
57439
57477
  onValueChange: setValue,
57440
57478
  children: [/* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: `Select ${config.label.toLowerCase()}` }) }), /* @__PURE__ */ jsx(SelectContent, { children: options.map((opt) => /* @__PURE__ */ jsx(SelectItem, {
57441
57479
  value: opt.value,
@@ -64390,55 +64428,6 @@ function buildPreviewDashboardSetupUrl(dashboardBaseUrl, handoff) {
64390
64428
  return new URL(handoff.dashboardPath, dashboardBaseUrl).toString();
64391
64429
  }
64392
64430
  //#endregion
64393
- //#region ../preview-next/src/client/preview/sidebarTabPreference.ts
64394
- const STORAGE_KEY = "preview-sidebar-tab";
64395
- const REQUEST_EVENT = "riverbank:preview-sidebar:request-open";
64396
- function normalizeOpenRequest(input) {
64397
- return parsePreviewSidebarOpenRequestDetail(typeof input === "string" ? { tab: input } : input);
64398
- }
64399
- function parsePreviewSidebarOpenRequestDetail(detail) {
64400
- const request = isRecord$10(detail) ? detail : {};
64401
- return {
64402
- tab: resolvePreviewSidebarTab(request.tab === "assistant" ? "assistant" : "editor"),
64403
- ...isPreviewDesignRow(request.designRow) ? { designRow: request.designRow } : {}
64404
- };
64405
- }
64406
- function getPreviewSidebarTab() {
64407
- if (typeof window === "undefined") return "editor";
64408
- try {
64409
- return resolvePreviewSidebarTab(window.localStorage.getItem(STORAGE_KEY) === "assistant" ? "assistant" : "editor");
64410
- } catch {
64411
- return "editor";
64412
- }
64413
- }
64414
- function setPreviewSidebarTab(tab) {
64415
- if (typeof window === "undefined") return;
64416
- try {
64417
- window.localStorage.setItem(STORAGE_KEY, resolvePreviewSidebarTab(tab));
64418
- } catch {}
64419
- }
64420
- function requestPreviewSidebarOpen(input) {
64421
- if (typeof window === "undefined") return;
64422
- const request = normalizeOpenRequest(input);
64423
- setPreviewSidebarTab(request.tab);
64424
- window.dispatchEvent(new window.CustomEvent(REQUEST_EVENT, { detail: request }));
64425
- }
64426
- function onPreviewSidebarOpenRequest(handler) {
64427
- if (typeof window === "undefined") return () => void 0;
64428
- const listener = (event) => {
64429
- if (!("detail" in event)) return;
64430
- handler(parsePreviewSidebarOpenRequestDetail(event.detail));
64431
- };
64432
- window.addEventListener(REQUEST_EVENT, listener);
64433
- return () => window.removeEventListener(REQUEST_EVENT, listener);
64434
- }
64435
- function isRecord$10(value) {
64436
- return typeof value === "object" && value !== null;
64437
- }
64438
- function isPreviewDesignRow(value) {
64439
- return value === "header" || value === "footer" || value === "header-layout" || value === "header-style" || value === "footer-layout";
64440
- }
64441
- //#endregion
64442
64431
  //#region ../preview-next/src/client/preview/previewChromeSurface.ts
64443
64432
  const PREVIEW_CHROME_THEME_CLASS_NAME = "builder-dashboard-chrome-theme";
64444
64433
  const PREVIEW_CHROME_PORTAL_CLASS_NAME = "builder-editor-chrome";
@@ -64519,14 +64508,7 @@ const IMAGE_BACKGROUND_TREATMENT = {
64519
64508
  minContrastRatio: BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO,
64520
64509
  minOverlayOpacity: .64
64521
64510
  };
64522
- const gradientPresetIds = GRADIENT_PRESETS.map((preset) => preset.id);
64523
- const gradientPresetIdSet = new Set(gradientPresetIds);
64524
- function parseGradientPresetId(value) {
64525
- if (typeof value !== "string") return null;
64526
- const normalized = value.trim();
64527
- if (!gradientPresetIdSet.has(normalized)) return null;
64528
- return normalized;
64529
- }
64511
+ const gradientPresetIds = GRADIENT_PRESET_IDS;
64530
64512
  function backgroundModeForOverride(override) {
64531
64513
  return override.kind;
64532
64514
  }
@@ -64620,7 +64602,27 @@ function backgroundCapabilityFromModes(modeCapabilities) {
64620
64602
  };
64621
64603
  }
64622
64604
  function parseBackgroundOverrideFromContent(content) {
64623
- return parseBackgroundOverride((isRecord$9(content._sectionStyles) ? content._sectionStyles : null)?.background);
64605
+ const source = parseCanonicalSectionBackground(content);
64606
+ return source.kind === "page-design-override" ? source.parsed : {
64607
+ kind: "supported",
64608
+ override: DEFAULT_BACKGROUND_OVERRIDE
64609
+ };
64610
+ }
64611
+ /**
64612
+ * Classifies persisted content before runtime Look decoration is considered.
64613
+ * Only the explicit owner marker can make a background a page-design override.
64614
+ */
64615
+ function parseCanonicalSectionBackground(content) {
64616
+ const background = (isRecord$9(content._sectionStyles) ? content._sectionStyles : null)?.background;
64617
+ if (background === null || background === void 0) return { kind: "none" };
64618
+ if (!isRecord$9(background) || background.contentOwner !== "page-design-editor") return {
64619
+ kind: "block-authored",
64620
+ background: isRecord$9(background) ? background : {}
64621
+ };
64622
+ return {
64623
+ kind: "page-design-override",
64624
+ parsed: parseBackgroundOverride(background)
64625
+ };
64624
64626
  }
64625
64627
  function parseBackgroundOverride(value) {
64626
64628
  if (value === null || value === void 0) return {
@@ -64727,11 +64729,15 @@ function serializeBackgroundOverride(override) {
64727
64729
  headingColor: foregroundToken
64728
64730
  };
64729
64731
  }
64730
- case "gradient": return {
64731
- contentOwner: pageDesignEditorBackgroundOverrideOwner,
64732
- type: "gradient",
64733
- gradientPresetId: override.gradientId
64734
- };
64732
+ case "gradient": {
64733
+ const foreground = getGradientPreset(override.gradientId).foreground;
64734
+ return {
64735
+ contentOwner: pageDesignEditorBackgroundOverrideOwner,
64736
+ type: "gradient",
64737
+ gradientPresetId: override.gradientId,
64738
+ ...foreground
64739
+ };
64740
+ }
64735
64741
  case "image": return {
64736
64742
  contentOwner: pageDesignEditorBackgroundOverrideOwner,
64737
64743
  type: "image",
@@ -67151,6 +67157,23 @@ function PreviewAuthBanner({ dashboardBaseUrl = null, surfaceId }) {
67151
67157
  })] });
67152
67158
  }
67153
67159
  //#endregion
67160
+ //#region ../preview-next/src/client/preview/sidebarTabPreference.ts
67161
+ const STORAGE_KEY = "preview-sidebar-tab";
67162
+ function getPreviewSidebarTab() {
67163
+ if (typeof window === "undefined") return "editor";
67164
+ try {
67165
+ return resolvePreviewSidebarTab(window.localStorage.getItem(STORAGE_KEY) === "assistant" ? "assistant" : "editor");
67166
+ } catch {
67167
+ return "editor";
67168
+ }
67169
+ }
67170
+ function setPreviewSidebarTab(tab) {
67171
+ if (typeof window === "undefined") return;
67172
+ try {
67173
+ window.localStorage.setItem(STORAGE_KEY, resolvePreviewSidebarTab(tab));
67174
+ } catch {}
67175
+ }
67176
+ //#endregion
67154
67177
  //#region ../blocks/src/client/site-chrome.tsx
67155
67178
  const siteChromeBlockRenderDeps = {
67156
67179
  buildThemeRuntime,
@@ -67943,12 +67966,12 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
67943
67966
  return surfaceState.options.filter((option) => option.available).length;
67944
67967
  }, [surfaceState]);
67945
67968
  const cycleableLayoutOptionCount = useMemo(() => {
67946
- if (surfaceState.kind !== "available") return 0;
67969
+ if (surfaceState.kind !== "available" || surfaceState.surface !== "header") return 0;
67947
67970
  return surfaceState.layoutOptions.filter((option) => option.available).length;
67948
67971
  }, [surfaceState]);
67949
67972
  const controlPlan = useMemo(() => {
67950
67973
  if (surfaceState.kind !== "available" || !background) return { cycleRows: [] };
67951
- return { cycleRows: [...surfaceState.surface === "header" || surfaceState.surface === "footer" ? [{
67974
+ return { cycleRows: [...surfaceState.surface === "header" ? [{
67952
67975
  label: "Layout",
67953
67976
  valueLabel: surfaceState.currentLayoutLabel,
67954
67977
  previousLabel: `Previous ${surface} Layout`,
@@ -67957,13 +67980,13 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
67957
67980
  canCycle: cycleableLayoutOptionCount > 1,
67958
67981
  applyAllowed: surfaceState.applyAllowed
67959
67982
  }),
67960
- onPrevious: () => customize?.cycleSurfaceLayout(surface, "prev"),
67961
- onNext: () => customize?.cycleSurfaceLayout(surface, "next")
67983
+ onPrevious: () => customize?.cycleHeaderLayout("prev"),
67984
+ onNext: () => customize?.cycleHeaderLayout("next")
67962
67985
  }] : [], {
67963
- label: "Look",
67986
+ label: surfaceState.surface === "footer" ? "Links" : "Look",
67964
67987
  valueLabel: surfaceState.currentLabel,
67965
- previousLabel: `Previous ${surface} Look`,
67966
- nextLabel: `Next ${surface} Look`,
67988
+ previousLabel: surfaceState.surface === "footer" ? "Previous footer link treatment" : "Previous header Look",
67989
+ nextLabel: surfaceState.surface === "footer" ? "Next footer link treatment" : "Next header Look",
67967
67990
  availability: cycleAvailabilityFromFlags({
67968
67991
  canCycle: cycleableOptionCount > 1,
67969
67992
  applyAllowed: surfaceState.applyAllowed
@@ -68070,7 +68093,7 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
68070
68093
  })]
68071
68094
  })]
68072
68095
  }) : null,
68073
- /* @__PURE__ */ jsx("div", {
68096
+ editorUiStore && (surfaceState.surface === "footer" || customize?.canOpenDesignEditor === true) ? /* @__PURE__ */ jsx("div", {
68074
68097
  className: "border-t pt-2",
68075
68098
  children: /* @__PURE__ */ jsx("button", {
68076
68099
  type: "button",
@@ -68078,20 +68101,19 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
68078
68101
  onClick: (event) => {
68079
68102
  event.preventDefault();
68080
68103
  event.stopPropagation();
68081
- if (surfaceState.surface === "footer") {
68082
- const editorUi = editorUiStore?.getState();
68083
- editorUi?.inspectFooter();
68084
- editorUi?.setPreviewSidebarTab("editor");
68085
- editorUi?.setDrawerOpen(true);
68086
- } else requestPreviewSidebarOpen({
68087
- tab: "editor",
68088
- designRow: "header-style"
68104
+ if (surfaceState.surface === "footer") editorUiStore.getState().openPreviewEditor({
68105
+ kind: "footer",
68106
+ target: "overview"
68107
+ });
68108
+ else editorUiStore.getState().openPreviewEditor({
68109
+ kind: "design",
68110
+ row: "header-style"
68089
68111
  });
68090
68112
  popover.close();
68091
68113
  },
68092
68114
  children: surfaceState.surface === "footer" ? "Edit footer" : "More options"
68093
68115
  })
68094
- }),
68116
+ }) : null,
68095
68117
  surfaceState.diagnostics.length > 0 ? /* @__PURE__ */ jsx("ul", {
68096
68118
  className: "space-y-1 text-xs text-amber-700",
68097
68119
  children: surfaceState.diagnostics.map((diagnostic) => /* @__PURE__ */ jsx("li", { children: diagnostic }, diagnostic))
@@ -68273,7 +68295,13 @@ function renderEditableSurface(children, surface, options) {
68273
68295
  });
68274
68296
  }
68275
68297
  function FooterModuleInspectionSurface({ children }) {
68276
- const uiStore = useOptionalEditorUiStoreInstance();
68298
+ const editorUiStore = useOptionalEditorUiStoreInstance();
68299
+ return editorUiStore ? /* @__PURE__ */ jsx(EnabledFooterModuleInspectionSurface, {
68300
+ editorUiStore,
68301
+ children
68302
+ }) : /* @__PURE__ */ jsx(Fragment$1, { children });
68303
+ }
68304
+ function EnabledFooterModuleInspectionSurface({ children, editorUiStore }) {
68277
68305
  const rootRef = useRef(null);
68278
68306
  const [active, setActive] = useState(null);
68279
68307
  const [position, setPosition] = useState(null);
@@ -68303,9 +68331,10 @@ function FooterModuleInspectionSurface({ children }) {
68303
68331
  });
68304
68332
  };
68305
68333
  const inspect = (moduleId) => {
68306
- uiStore?.getState().inspectFooterModule(moduleId);
68307
- uiStore?.getState().setPreviewSidebarTab("editor");
68308
- uiStore?.getState().setDrawerOpen(true);
68334
+ editorUiStore.getState().openPreviewEditor({
68335
+ kind: "footer",
68336
+ target: { moduleId }
68337
+ });
68309
68338
  };
68310
68339
  return /* @__PURE__ */ jsxs("div", {
68311
68340
  ref: rootRef,
@@ -68321,7 +68350,7 @@ function FooterModuleInspectionSurface({ children }) {
68321
68350
  event.preventDefault();
68322
68351
  inspect(parsed.value);
68323
68352
  },
68324
- children: [children, active && position && uiStore ? /* @__PURE__ */ jsx("button", {
68353
+ children: [children, active && position ? /* @__PURE__ */ jsx("button", {
68325
68354
  type: "button",
68326
68355
  className: "pointer-events-auto fixed z-[75] rounded-full border bg-background px-3 py-1.5 text-xs font-medium text-foreground shadow-md",
68327
68356
  style: position,
@@ -68569,17 +68598,17 @@ function LinkedEntryEditEventBridge() {
68569
68598
  //#region ../preview-next/src/client/preview/PreviewShellLayout.tsx
68570
68599
  const previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
68571
68600
  const PreviewEditorSidebar = React.lazy(async () => {
68572
- return { default: (await import("./PreviewEditorSidebar-BBT-kZAM.mjs")).PreviewEditorSidebar };
68601
+ return { default: (await import("./PreviewEditorSidebar-CTR6LUhN.mjs")).PreviewEditorSidebar };
68573
68602
  });
68574
68603
  const PreviewEditorUI = React.lazy(async () => {
68575
- return { default: (await import("./PreviewEditorUI-D69xNKT2.mjs")).PreviewEditorUI };
68604
+ return { default: (await import("./PreviewEditorUI-DZg15Zip.mjs")).PreviewEditorUI };
68576
68605
  });
68577
68606
  const previewPaneContainmentStyle = {
68578
68607
  contain: "layout paint",
68579
68608
  isolation: "isolate",
68580
68609
  transform: "translateZ(0)"
68581
68610
  };
68582
- function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseUrl = null, pageId, entryData, contentTypeSchema, referenceContentTypeKeys = [], draftContent, currentTemplate, apiClient, bearerToken, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonPersonalityId = null, runtimePaletteState, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, themeSelectionFooterContext, supabaseUrl, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, themeRuntime = defaultPreviewThemeRuntime, siteStyleAccess = { kind: "hidden" }, onFooterSaved }) {
68611
+ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseUrl = null, pageId, entryData, contentTypeSchema, referenceContentTypeKeys = [], draftContent, currentTemplate, apiClient, bearerToken, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonStyleSelection = null, runtimePaletteState, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, supabaseUrl, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, themeRuntime = defaultPreviewThemeRuntime, siteStyleAccess = { kind: "hidden" }, onFooterSaved }) {
68583
68612
  const layout = useOptionalPreviewLayout();
68584
68613
  const headerNode = layout?.headerNode ?? null;
68585
68614
  const bannerNode = layout?.bannerNode ?? null;
@@ -68590,7 +68619,6 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68590
68619
  const setDrawerOpen = useEditorUiStore((s) => s.setDrawerOpen);
68591
68620
  const sidebarTab = useEditorUiStore((s) => s.previewSidebarTab);
68592
68621
  const setPreviewSidebarActiveTab = useEditorUiStore((s) => s.setPreviewSidebarTab);
68593
- const [designRowRequest, setDesignRowRequest] = useState(null);
68594
68622
  const viewportMode = useEditorUiStore((s) => s.viewport.mode);
68595
68623
  const viewportWidth = useEditorUiStore((s) => s.viewport.width);
68596
68624
  const sidebarWidth = useEditorUiStore((s) => s.viewport.sidebarWidth);
@@ -68663,19 +68691,6 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68663
68691
  useEffect(() => {
68664
68692
  setPreviewSidebarActiveTab(getPreviewSidebarTab());
68665
68693
  }, [setPreviewSidebarActiveTab]);
68666
- useEffect(() => {
68667
- return onPreviewSidebarOpenRequest((request) => {
68668
- setPreviewSidebarActiveTab(request.tab);
68669
- if (request.designRow) {
68670
- const row = request.designRow;
68671
- setDesignRowRequest((current) => ({
68672
- id: (current?.id ?? 0) + 1,
68673
- row
68674
- }));
68675
- }
68676
- setDrawerOpen(true);
68677
- });
68678
- }, [setDrawerOpen, setPreviewSidebarActiveTab]);
68679
68694
  const [containerWidth, setContainerWidth] = useState(0);
68680
68695
  const [contentHeight, setContentHeight] = useState(0);
68681
68696
  const containerObserverRef = useRef(null);
@@ -68768,15 +68783,13 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68768
68783
  themeSelectionId,
68769
68784
  themeSelectionVersion,
68770
68785
  themeSelectionUpdatedAt,
68771
- themeSelectionButtonPersonalityId,
68786
+ themeSelectionButtonStyleSelection,
68772
68787
  runtimePaletteState,
68773
68788
  themeSelectionHeaderLayoutId,
68774
68789
  themeSelectionHeaderStyleId,
68775
68790
  themeSelectionHeaderLookId,
68776
68791
  themeSelectionFooterLookId,
68777
68792
  themeSelectionHeaderContext,
68778
- themeSelectionFooterContext,
68779
- designRowRequest,
68780
68793
  supabaseUrl,
68781
68794
  sdkConfig: sdkConfig ?? null,
68782
68795
  activeTab: sidebarTab,
@@ -68811,6 +68824,10 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68811
68824
  apiClient
68812
68825
  })
68813
68826
  });
68827
+ const previewBanner = /* @__PURE__ */ jsx(PreviewAuthBanner, {
68828
+ dashboardBaseUrl,
68829
+ surfaceId
68830
+ });
68814
68831
  return /* @__PURE__ */ jsx(PreviewThemeOverlayProvider, {
68815
68832
  baseTheme: theme,
68816
68833
  children: /* @__PURE__ */ jsx(PreviewDesignCoordinatorProvider, { children: /* @__PURE__ */ jsx(SiteChromeCustomizeProvider, {
@@ -68824,7 +68841,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68824
68841
  initialSelections: {
68825
68842
  selectionVersion: themeSelectionVersion,
68826
68843
  selectionUpdatedAt: themeSelectionUpdatedAt,
68827
- buttonPersonalityId: themeSelectionButtonPersonalityId,
68844
+ buttonStyleSelection: themeSelectionButtonStyleSelection,
68828
68845
  runtimePaletteState,
68829
68846
  headerLayoutId: themeSelectionHeaderLayoutId,
68830
68847
  headerStyleId: themeSelectionHeaderStyleId,
@@ -68832,15 +68849,12 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68832
68849
  footerLookId: themeSelectionFooterLookId
68833
68850
  },
68834
68851
  headerSelectionContext: themeSelectionHeaderContext,
68835
- footerSelectionContext: themeSelectionFooterContext,
68836
68852
  siteStyleAccess,
68853
+ canOpenDesignEditor: entryData == null && pageId !== null && canInspectSiteStyle(siteStyleAccess),
68837
68854
  children: /* @__PURE__ */ jsxs(PreviewBlockCustomizeSelectionProvider, { children: [
68838
68855
  /* @__PURE__ */ jsx(LinkedEntryEditEventBridge, {}),
68839
68856
  editorUI,
68840
- /* @__PURE__ */ jsx(PreviewAuthBanner, {
68841
- dashboardBaseUrl,
68842
- surfaceId
68843
- }),
68857
+ previewBanner,
68844
68858
  /* @__PURE__ */ jsx("div", {
68845
68859
  className: "fixed inset-0 overflow-hidden bg-background",
68846
68860
  children: isOpen ? /* @__PURE__ */ jsx(ResizableSplitPane, {
@@ -68863,7 +68877,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68863
68877
  }
68864
68878
  //#endregion
68865
68879
  //#region ../preview-next/src/client/preview/PreviewShell.tsx
68866
- function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug, editableId, previewSession, previewToken, dashboardBaseUrl = null, surfaceId, theme, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonPersonalityId = null, runtimePaletteState, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, themeSelectionFooterContext, pageId, routeId, entryData, contentTypeSchema, referenceContentTypeKeys = [], draftContent, currentTemplate, initialStatus, initialBlocks, pageMetadata, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, supabaseUrl, themeRuntime = defaultPreviewThemeRuntime, designEditorEligibility, hideSiteStyleConfigurator = false, baseFetch, onFooterSaved }) {
68880
+ function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug, editableId, previewSession, previewToken, dashboardBaseUrl = null, surfaceId, theme, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonStyleSelection = null, runtimePaletteState, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, pageId, routeId, entryData, contentTypeSchema, referenceContentTypeKeys = [], draftContent, currentTemplate, initialStatus, initialBlocks, pageMetadata, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, supabaseUrl, themeRuntime = defaultPreviewThemeRuntime, designEditorEligibility, hideSiteStyleConfigurator = false, baseFetch, onFooterSaved }) {
68867
68881
  const apiClient = useMemo(() => createBearerAPIClient(previewToken, apiBaseUrl), [previewToken, apiBaseUrl]);
68868
68882
  const resolvedDesignEditorEligibility = designEditorEligibility ?? defaultDesignEditorEligibility({
68869
68883
  pageId,
@@ -68920,14 +68934,13 @@ function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug,
68920
68934
  themeSelectionId,
68921
68935
  themeSelectionVersion,
68922
68936
  themeSelectionUpdatedAt,
68923
- themeSelectionButtonPersonalityId,
68937
+ themeSelectionButtonStyleSelection,
68924
68938
  runtimePaletteState,
68925
68939
  themeSelectionHeaderLayoutId,
68926
68940
  themeSelectionHeaderStyleId,
68927
68941
  themeSelectionHeaderLookId,
68928
68942
  themeSelectionFooterLookId,
68929
68943
  themeSelectionHeaderContext,
68930
- themeSelectionFooterContext,
68931
68944
  supabaseUrl,
68932
68945
  isSiteLaunched,
68933
68946
  maintenanceModeEnabled,
@@ -69795,7 +69808,6 @@ function BlockToolbar({ blockId, blockKind, content, bookingOfferingPresets, the
69795
69808
  e.preventDefault();
69796
69809
  e.stopPropagation();
69797
69810
  const state = uiStore.getState();
69798
- setPreviewSidebarTab("editor");
69799
69811
  state.setPreviewSidebarTab("editor");
69800
69812
  state.setDrawerOpen(true);
69801
69813
  state.requestFocus({
@@ -69812,7 +69824,6 @@ function BlockToolbar({ blockId, blockKind, content, bookingOfferingPresets, the
69812
69824
  e.stopPropagation();
69813
69825
  inspectBlock();
69814
69826
  const state = uiStore.getState();
69815
- setPreviewSidebarTab("editor");
69816
69827
  state.setPreviewSidebarTab("editor");
69817
69828
  state.setDrawerOpen(true);
69818
69829
  }, [inspectBlock, uiStore]);
@@ -70069,30 +70080,81 @@ function BackgroundChooser({ capability, current, imagePoolStatus, onChoose }) {
70069
70080
  })(event);
70070
70081
  }
70071
70082
  });
70072
- const renderGradientOptions = () => capability.gradientIds?.length ? /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
70073
- className: "mb-1 text-xs font-medium text-muted-foreground",
70074
- children: "Gradients"
70075
- }), /* @__PURE__ */ jsx("div", {
70076
- className: "space-y-1",
70077
- children: capability.gradientIds.map((gradientId) => /* @__PURE__ */ jsx("button", {
70078
- type: "button",
70079
- className: `w-full rounded-md border px-2 py-1 text-left text-xs hover:bg-muted ${current.kind === "gradient" && current.gradientId === gradientId ? "border-foreground" : "bg-background"}`,
70080
- onClick: chooseFromClick({
70081
- kind: "gradient",
70082
- gradientId
70083
- }),
70084
- children: /* @__PURE__ */ jsxs("span", {
70085
- className: "flex items-center gap-2",
70083
+ const renderGradientOptions = () => capability.gradientIds?.length ? /* @__PURE__ */ jsxs("div", { children: [
70084
+ /* @__PURE__ */ jsx("div", {
70085
+ className: "mb-1 text-xs font-medium text-muted-foreground",
70086
+ children: "Gradients"
70087
+ }),
70088
+ /* @__PURE__ */ jsx("p", {
70089
+ className: "mb-2 text-[11px] leading-4 text-muted-foreground",
70090
+ children: "Curated presets use this site's colours. The full section preview shows the final result."
70091
+ }),
70092
+ /* @__PURE__ */ jsx("div", {
70093
+ className: "grid grid-cols-2 gap-2",
70094
+ children: capability.gradientIds.map((gradientId) => {
70095
+ const preset = getGradientPreset(gradientId);
70096
+ const kindLabel = gradientKindLabel(preset);
70097
+ const selected = current.kind === "gradient" && current.gradientId === gradientId;
70098
+ return /* @__PURE__ */ jsxs("button", {
70099
+ type: "button",
70100
+ "aria-label": `Choose ${preset.name}, ${kindLabel}`,
70101
+ "aria-pressed": selected,
70102
+ className: `overflow-hidden rounded-md border text-left text-xs transition hover:border-muted-foreground ${selected ? "border-foreground ring-1 ring-foreground" : "bg-background"}`,
70103
+ onClick: chooseFromClick({
70104
+ kind: "gradient",
70105
+ gradientId
70106
+ }),
70107
+ children: [/* @__PURE__ */ jsx("span", {
70108
+ "aria-hidden": "true",
70109
+ className: "block h-14 w-full border-b",
70110
+ style: { backgroundImage: gradientPreviewCss(gradientId) }
70111
+ }), /* @__PURE__ */ jsxs("span", {
70112
+ className: "relative block min-w-0 px-2 py-1.5",
70113
+ children: [
70114
+ /* @__PURE__ */ jsx("span", {
70115
+ className: "block truncate font-medium",
70116
+ children: preset.name
70117
+ }),
70118
+ /* @__PURE__ */ jsx("span", {
70119
+ className: "block text-[10px] text-muted-foreground",
70120
+ children: kindLabel
70121
+ }),
70122
+ selected ? /* @__PURE__ */ jsx("span", {
70123
+ "aria-hidden": "true",
70124
+ className: "absolute right-2 top-1.5 grid h-4 w-4 place-items-center rounded-full bg-foreground text-[10px] text-background",
70125
+ children: "✓"
70126
+ }) : null
70127
+ ]
70128
+ })]
70129
+ }, gradientId);
70130
+ })
70131
+ }),
70132
+ current.kind === "gradient" ? /* @__PURE__ */ jsxs("div", {
70133
+ className: "mt-2 flex items-center justify-between gap-2 border-t pt-2",
70134
+ children: [/* @__PURE__ */ jsxs("span", {
70135
+ className: "flex min-w-0 items-center gap-2",
70086
70136
  children: [/* @__PURE__ */ jsx("span", {
70087
- className: "h-4 w-8 shrink-0 rounded border",
70088
- style: { backgroundImage: gradientPreviewCss(gradientId) }
70089
- }), /* @__PURE__ */ jsx("span", {
70090
- className: "truncate",
70091
- children: gradientLabel(gradientId)
70137
+ "aria-hidden": "true",
70138
+ className: "h-7 w-10 shrink-0 rounded border",
70139
+ style: { backgroundImage: gradientPreviewCss(current.gradientId) }
70140
+ }), /* @__PURE__ */ jsxs("span", {
70141
+ className: "min-w-0",
70142
+ children: [/* @__PURE__ */ jsx("span", {
70143
+ className: "block truncate text-xs font-medium",
70144
+ children: gradientLabel(current.gradientId)
70145
+ }), /* @__PURE__ */ jsx("span", {
70146
+ className: "block text-[10px] text-muted-foreground",
70147
+ children: "Selected for this section"
70148
+ })]
70092
70149
  })]
70093
- })
70094
- }, gradientId))
70095
- })] }) : null;
70150
+ }), capability.modes.includes("default") ? /* @__PURE__ */ jsx("button", {
70151
+ type: "button",
70152
+ className: "shrink-0 rounded px-1.5 py-1 text-xs font-medium hover:bg-muted",
70153
+ onClick: chooseFromClick(defaultBackgroundOverrideForMode("default", capability)),
70154
+ children: "Use default"
70155
+ }) : null]
70156
+ }) : null
70157
+ ] }) : null;
70096
70158
  const renderImageOptions = () => capability.modes.includes("image") ? /* @__PURE__ */ jsxs("div", { children: [
70097
70159
  /* @__PURE__ */ jsx("div", {
70098
70160
  className: "mb-1 text-xs font-medium text-muted-foreground",
@@ -70324,7 +70386,15 @@ function backgroundModeLabel(mode) {
70324
70386
  return mode === "default" ? "Default" : formatVariantLabel(mode);
70325
70387
  }
70326
70388
  function gradientLabel(gradientId) {
70327
- return GRADIENT_PRESETS.find((preset) => preset.id === gradientId)?.name ?? formatVariantLabel(gradientId);
70389
+ return getGradientPreset(gradientId).name;
70390
+ }
70391
+ function gradientKindLabel(preset) {
70392
+ switch (preset.type) {
70393
+ case "linear": return "Linear";
70394
+ case "radial": return "Radial · top";
70395
+ case "conic": return "Conic";
70396
+ default: return assertNever$6(preset.type, "Unhandled gradient preset type");
70397
+ }
70328
70398
  }
70329
70399
  function imageSourceLabel(source) {
70330
70400
  switch (source) {
@@ -70338,8 +70408,7 @@ function tokenSwatchCss(token) {
70338
70408
  return `rgb(var(--tb-${token}))`;
70339
70409
  }
70340
70410
  function gradientPreviewCss(gradientId) {
70341
- const preset = GRADIENT_PRESETS.find((candidate) => candidate.id === gradientId);
70342
- if (!preset) return "linear-gradient(135deg, rgb(var(--tb-primary)), rgb(var(--tb-secondary)))";
70411
+ const preset = getGradientPreset(gradientId);
70343
70412
  return gradientToCss(preset, Object.fromEntries(preset.stops.map((stop) => [stop.color, tokenSwatchCss(stop.color)])));
70344
70413
  }
70345
70414
  function readBackgroundColorPaletteSnapshot() {
@@ -71348,4 +71417,4 @@ function deriveDashboardBaseUrlFromApiBaseUrl(apiBaseUrl) {
71348
71417
  }
71349
71418
  }
71350
71419
  //#endregion
71351
- export { buildFontPreviewUrl as C, Callout as D, FixedBottomSurface as E, CalloutDescription as O, isAdapterReferenceKind as S, getSiteFontsStorageUrl as T, usePreviewBlockCustomizeSelectionOptional as _, usePreviewPageDesignEditorState as a, previewWidgetOverrides as b, applyPreviewChromeSurfaceToElement as c, buildPreviewDashboardSetupUrl as d, resolvePreviewDashboardSetupHandoff as f, canInspectSiteStyle as g, canApplySiteStyle as h, PreviewShellLayout as i, resolvePreviewChromeSurface as l, resolvePreviewSidebarChromeModel as m, SdkPreviewModeRuntime_exports as n, PREVIEW_CHROME_PORTAL_CLASS_NAME as o, resolvePreviewEditorGuidanceModel as p, PreviewShell as r, PREVIEW_CHROME_THEME_CLASS_NAME as s, SdkPreviewModeRuntime as t, setPreviewSidebarTab as u, useBlockCustomizeControls as v, generateFontFaceCss as w, BlockEditor as x, PreviewFormProvider as y };
71420
+ export { generateFontFaceCss as C, Callout as D, FixedBottomSurface as E, CalloutDescription as O, buildFontPreviewUrl as S, ThemeScope as T, useBlockCustomizeControls as _, usePreviewPageDesignEditorState as a, BlockEditor as b, applyPreviewChromeSurfaceToElement as c, resolvePreviewDashboardSetupHandoff as d, resolvePreviewEditorGuidanceModel as f, usePreviewBlockCustomizeSelectionOptional as g, canInspectSiteStyle as h, PreviewShellLayout as i, resolvePreviewChromeSurface as l, canApplySiteStyle as m, SdkPreviewModeRuntime_exports as n, PREVIEW_CHROME_PORTAL_CLASS_NAME as o, resolvePreviewSidebarChromeModel as p, PreviewShell as r, PREVIEW_CHROME_THEME_CLASS_NAME as s, SdkPreviewModeRuntime as t, buildPreviewDashboardSetupUrl as u, PreviewFormProvider as v, getSiteFontsStorageUrl as w, isAdapterReferenceKind as x, previewWidgetOverrides as y };