@riverbankcms/sdk 0.107.0 → 0.108.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 (159) hide show
  1. package/dist/{PreviewEditorSidebar-DpAbAl08.mjs → PreviewEditorSidebar-BBT-kZAM.mjs} +46 -11
  2. package/dist/{PreviewEditorUI-O7cn6Xxv.mjs → PreviewEditorUI-D69xNKT2.mjs} +10 -9
  3. package/dist/{PreviewQueryProvider-D0tnKl0t.mjs → PreviewQueryProvider-RRu7wyQ5.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-CVB7urtl.mjs → SdkPreviewModeRuntime-CuDjXH6o.mjs} +426 -72
  5. package/dist/{SiteChromeCustomizeContext-C_sizso-.mjs → SiteChromeCustomizeContext-BQUY2dEk.mjs} +3865 -544
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +3712 -220
  7. package/dist/_dts/api/src/blocks.d.ts +41 -7
  8. package/dist/_dts/api/src/bookingRecords.d.ts +180 -115
  9. package/dist/_dts/api/src/cache-tags.d.ts +3 -0
  10. package/dist/_dts/api/src/contentRuntime.d.ts +19 -1
  11. package/dist/_dts/api/src/endpoints.d.ts +99 -0
  12. package/dist/_dts/api/src/footer-settings.d.ts +1 -0
  13. package/dist/_dts/api/src/footerSettings.d.ts +8 -0
  14. package/dist/_dts/api/src/index.d.ts +5 -2
  15. package/dist/_dts/api/src/navigation/contracts.d.ts +3 -3
  16. package/dist/_dts/api/src/previewContentContract.d.ts +4 -0
  17. package/dist/_dts/api/src/sdkContracts.d.ts +62 -0
  18. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  19. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +143 -55
  20. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -1
  21. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +41 -1
  22. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +0 -1
  23. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +50 -0
  25. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +9 -48
  26. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -1
  28. package/dist/_dts/blocks/src/system/icons/social.d.ts +5 -0
  29. package/dist/_dts/blocks/src/system/icons/svg.d.ts +1 -0
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +2 -2
  31. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +13 -0
  32. package/dist/_dts/blocks/src/system/node/fragments/footerNav.d.ts +2 -0
  33. package/dist/_dts/blocks/src/system/node/fragments/styledContainer.d.ts +4 -4
  34. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +3 -12
  35. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/types/link.d.ts +3 -3
  38. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +14 -0
  39. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +27 -8
  40. package/dist/_dts/content-editor/src/footerComposer.d.ts +56 -0
  41. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +1 -1
  42. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +5 -5
  43. package/dist/_dts/content-editor/src/index.d.ts +2 -0
  44. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +3 -1
  45. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +20 -36
  46. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +5 -1
  47. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +11 -0
  48. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  49. package/dist/_dts/content-model/src/definitions/shared.d.ts +3 -0
  50. package/dist/_dts/core/src/branded.d.ts +3 -0
  51. package/dist/_dts/core/src/editor-state.d.ts +4 -0
  52. package/dist/_dts/core/src/footer-composition.d.ts +143 -0
  53. package/dist/_dts/core/src/index.d.ts +2 -0
  54. package/dist/_dts/core/src/public-profile.d.ts +73 -0
  55. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3043 -2941
  56. package/dist/_dts/db/src/schemas/forms.d.ts +10 -10
  57. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +5 -0
  58. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +1 -0
  59. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -1
  60. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +2 -1
  61. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +2 -1
  62. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +10 -0
  63. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +1 -0
  64. package/dist/_dts/path-utils/src/index.d.ts +5 -0
  65. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +5 -0
  66. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  67. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  68. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  69. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  70. package/dist/_dts/preview-next/src/client/preview/previewErrorMessages.d.ts +4 -0
  71. package/dist/_dts/sdk/src/cli/content/reader.d.ts +1 -0
  72. package/dist/_dts/sdk/src/client/management/blocks.d.ts +14 -1
  73. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -0
  74. package/dist/_dts/sdk/src/client/management/types.d.ts +15 -1
  75. package/dist/_dts/sdk/src/config/content-types.d.ts +2 -0
  76. package/dist/_dts/sdk/src/config/content-validation.d.ts +4 -0
  77. package/dist/_dts/sdk/src/navigation/index.d.ts +2 -0
  78. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -2
  79. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -1
  80. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  81. package/dist/_dts/sdk/src/version.d.ts +1 -1
  82. package/dist/_dts/site-commands/src/commands.d.ts +13 -10
  83. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  84. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  85. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +17 -0
  86. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  88. package/dist/_dts/theme-core/src/cards/types.d.ts +3 -3
  89. package/dist/_dts/theme-core/src/footer/mode.d.ts +15 -0
  90. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  92. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -30
  93. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/schema.d.ts +1186 -34
  95. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +12 -1
  96. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +15 -0
  97. package/dist/cli/index.mjs +760 -374
  98. package/dist/client/{DiscountCodeDisclosure-BwGkvmVH.mjs → DiscountCodeDisclosure-D6TOf6Hi.mjs} +1 -1
  99. package/dist/client/{EventCombined.client-JnWE6Hzc.mjs → EventCombined.client-Dao3zxRk.mjs} +3 -3
  100. package/dist/client/{EventListing.client-DQewc_kg.mjs → EventListing.client-B2NNt4y1.mjs} +2 -2
  101. package/dist/client/{LeafletStaticMap-DPAU3SFt.mjs → LeafletStaticMap-BhwFo16w.mjs} +1 -1
  102. package/dist/client/{MagicLinkForm-D4kpWCbW.mjs → MagicLinkForm-BWnB7cMR.mjs} +2 -2
  103. package/dist/client/{StepIndicator-CBlkb4rA.mjs → StepIndicator-TzRiQ0BY.mjs} +2 -2
  104. package/dist/client/{accordion-DAIBVpTS.mjs → accordion-BPy-AJ4_.mjs} +1 -1
  105. package/dist/client/{bookingForm-DZ-4l5_1.mjs → bookingForm-BL4PGZds.mjs} +6 -6
  106. package/dist/client/bookings.mjs +143 -94
  107. package/dist/client/{buttons-DJgynGHQ.mjs → buttons-EBjyslaX.mjs} +144 -95
  108. package/dist/client/{carousel-D-SLfX8r.mjs → carousel-C2b7Cn9-.mjs} +1 -1
  109. package/dist/client/{cart-CEgbgJhX.mjs → cart-BQcbXIVD.mjs} +3 -3
  110. package/dist/client/{checkout-CXWrCRAA.mjs → checkout-DEmpGRJu.mjs} +3 -3
  111. package/dist/client/client.mjs +827 -434
  112. package/dist/client/{courseRegistration-DVmLrRVz.mjs → courseRegistration-BqRZPmsq.mjs} +7 -7
  113. package/dist/client/{eventCalendar-DCuyPY_c.mjs → eventCalendar-B8N_tSl5.mjs} +5 -5
  114. package/dist/client/{eventCombined-kP2CA2D4.mjs → eventCombined-Gjn6gtq7.mjs} +2 -2
  115. package/dist/client/{eventDetails-DU0LeF5e.mjs → eventDetails-M-VCxA-r.mjs} +3 -3
  116. package/dist/client/{eventListing-CcHF87BI.mjs → eventListing-DR19hqYi.mjs} +2 -2
  117. package/dist/client/{eventRegistration-DJnR0yFH.mjs → eventRegistration-BR02a0k3.mjs} +7 -7
  118. package/dist/client/{form-CH1lCusH.mjs → form-LY2xIbwg.mjs} +2 -2
  119. package/dist/client/{headerSection-CBPFZoku.mjs → headerSection-CYwwXJfh.mjs} +3 -3
  120. package/dist/client/hooks.mjs +377 -362
  121. package/dist/client/{locationMap-Cx1hBg5n.mjs → locationMap-DWnBXrFq.mjs} +2 -2
  122. package/dist/client/{newsletterForm-1ZL_ti9u.mjs → newsletterForm-D9s-fQ2P.mjs} +2 -2
  123. package/dist/client/{pricing-BIbzmV0G.mjs → pricing-DDq80oYc.mjs} +1 -1
  124. package/dist/client/{productDetail-BTh5gHBV.mjs → productDetail-B0SbWd45.mjs} +3 -3
  125. package/dist/client/{productList-Cc7OMrqN.mjs → productList-PwYlZn0y.mjs} +3 -3
  126. package/dist/client/{propsDecoder-oR-M-ISN.mjs → propsDecoder-BRWBiH7i.mjs} +33 -9
  127. package/dist/client/rendering/client.mjs +247 -40
  128. package/dist/client/rendering/islands.mjs +18 -18
  129. package/dist/client/rendering.mjs +478 -270
  130. package/dist/client/{shop-CQ_YbCnn.mjs → shop-CMwZPYME.mjs} +6 -6
  131. package/dist/client/{shop-commerce-BM-AoD3M.mjs → shop-commerce-BuxsFate.mjs} +5 -5
  132. package/dist/client/{shop-commerce-store-DFMQhU5p.mjs → shop-commerce-store-boYlEJ91.mjs} +1 -1
  133. package/dist/client/{shopShared-D0SKO2Cu.mjs → shopShared-D2naaOes.mjs} +2 -2
  134. package/dist/client/{useDiscountCodeUi-CrG4_ARt.mjs → useDiscountCodeUi-D9RHpVoj.mjs} +1 -1
  135. package/dist/client/{useEventFilters-CxK8Fekl.mjs → useEventFilters-igGiK1re.mjs} +3 -3
  136. package/dist/client/{usePolling-jcVryNgZ.mjs → usePolling-CI7MbsFB.mjs} +2 -2
  137. package/dist/preview-next/before-render.mjs +178 -0
  138. package/dist/preview-next/client/runtime.mjs +4 -4
  139. package/dist/preview-next/middleware.mjs +178 -0
  140. package/dist/{previewAuthStore-BPcJPzdz.mjs → previewAuthStore-a_cBD28m.mjs} +178 -0
  141. package/dist/{sdk-runtime-C39Rsk-x.mjs → sdk-runtime-MBzD-GmP.mjs} +2 -2
  142. package/dist/{separator-BoMSQnsP.mjs → separator-5ahRBC85.mjs} +1 -1
  143. package/dist/server/components.mjs +556 -366
  144. package/dist/server/config-validation.mjs +384 -363
  145. package/dist/server/config.mjs +384 -364
  146. package/dist/server/data.mjs +377 -362
  147. package/dist/server/index.mjs +179 -1
  148. package/dist/server/navigation.mjs +9 -3
  149. package/dist/server/next.mjs +1384 -995
  150. package/dist/server/page-converter.mjs +368 -355
  151. package/dist/server/prebuild.mjs +1 -1
  152. package/dist/server/rendering/server.mjs +539 -360
  153. package/dist/server/rendering.mjs +556 -366
  154. package/dist/server/routing.mjs +613 -543
  155. package/dist/server/server.mjs +554 -361
  156. package/dist/server/theme-bridge.mjs +189 -98
  157. package/dist/server/theme.mjs +161 -95
  158. package/dist/styles/index.css +7 -1
  159. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { $ as idleEditorTransactionQueueState, $a as eventButtonVariantSchema, $c as generateInteractiveChildInheritanceCSS, $d as ImageUp, $i as LABEL_FONT_SIZE_MAP, $l as Dialog, $n as eventListingBlockDefinition, $o as defineInteractiveIslandMetaKeys, $r as footerBottomTextFragment, $s as ChevronDownIcon, $t as getPageDesignEditorState, $u as formatBookingTime, Aa as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Ac as resolveMediaNodeResponsiveImage, Ad as Upload, Af as __commonJSMin, Ai as normalEditorCuratedPromotedFieldPaths, Al as Textarea, An as getBlockDefinition, Ao as buildGoogleMapsDirectionsUrl, Ar as buildShopInteractiveIslandProps, As as parseBlockIconValue, At as unsafeAsLinkedContentEntryId, Au as __spreadArray, Ba as isSemanticSpacing, Bc as resolveMediaTransformForAspect, Bd as Settings, Bi as pageDesignEditorBackgroundOverrideOwner, Bl as Popover, Bn as mediaTransforms, Bo as getCardOrientation, Br as deriveCommerceCheckoutState, Bs as inlineTextToPlainText, Bt as usePalette, Bu as cva, Ca as generateCssVars, Cc as MediaPlaceholder, Cd as unsafeAsPassId, Cf as ChevronLeft, Ci as readHeaderNavFontSizePreference, Cl as unmapValueFromSelect, Cn as isKeyboardEvent, Co as normalizeBoxStylesCardVariant, Cr as resolveEventRegistrationScopedEvents, Cs as resolveFeatureCardGeneratedIconSizePx, Ct as useOptionalEditorUiStoreInstance, Cu as DropdownMenuTrigger, Dc as renderAudio, Dd as ok$3, Df as ArrowUp, Di as compileEditorModelRuntime, Dl as TooltipContent, Dn as isSupportedLoaderEndpoint, Do as resolveTokenOrCssColorValue, Dr as buildCheckoutInteractiveIslandProps, Ds as buildGeneratedBlockIconRenderAssetLookupFromUnknown, Dt as pushHistoryEntry, Du as __generator, Ea as ctaButton, Ec as getCurrentResolveImageUrlContext, Ed as err$2, Ef as Box, Ei as applyCompiledRuntimeFieldsToContent, El as Tooltip, En as useUniqueId, Eo as resolveOnColorForThemeToken, Er as buildCartInteractiveIslandProps, Es as toFeatureCardIconSuggestionInputs, Et as createHistoryState, Eu as __extends, Fa as normalizeOfferingsPreviewItemLimit, Fc as attachRenderableMediaAssetFields, Fi as designRuntimeRulesForTheme, Fl as SelectTrigger, Fn as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Fo as formatEventDateParts, Fr as formatCommercePrice, Fs as createRichTextDocFromMarkdown, Ft as createSnapshotFromPageRecord, Fu as useControllableState, Ga as getEventRuntimeFiltersKey, Gc as siblingPath$1, Gd as Pencil, Gi as NAV_LINK_BORDER_RADIUS_MAP, Gl as TabsContent, Gn as isInternalResolvedLinkValue, Go as getEventAvailability, Gr as augmentManifestWithStyleGroups, Gs as SEMANTIC_ICON_DEFINITIONS, Gt as createManifestFormAdapter, Gu as createEditorRemoveBlockCommand, Ha as buildEventRuntimeFilters, Hc as getDirectImageUrlForMediaAsset, Hd as RotateCcw, Hi as getComponentShadowVar, Hl as PopoverTrigger, Hn as uiTransforms, Ho as groupEventsByDate, Hr as productItemKey, Hs as parseInlineTextFromUnknown, Ht as unfinishedBlockCopy, Hu as cn$1, Ia as resolveOfferingsPreviewCoursePath, Ic as isRotationDimensionSwap, Id as Star, Ii as getCuratedSiteStyle, Il as SelectValue, In as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, Io as formatEventPrice, Ir as formatInterval, Is as unwrapRichTextRoot, Iu as createContextScope, Ja as normalizeCsvIds, Jc as AFFORDANCE_SUPPRESS_CLASS, Ji as NAV_LINK_PADDING_X_MAP, Jl as Content$1, Jn as shopBlockDefinition, Jo as getLocalMinuteOfDay, Jr as cardFragment, Js as ArrowDownIcon, Jt as evaluateVisibility, Ju as unsafeAsEditorBlockValues, Ka as resolveEventCalendarListPageSize, Ki as NAV_LINK_LETTER_SPACING_MAP, Kl as TabsList, Kn as ImageResolveContextProvider, Ko as getEventAvailabilityStatus, Kr as richTextFragment, Ks as getSemanticIconComponent, Ku as createEditorReorderBlocksCommand, La as resolveOfferingsPreviewGroupCta, Lc as normalizeRightAngle, Ld as Sparkles, Li as surfaceResolutionContextFromTheme, Ll as Label, Ln as planSiteOverlayHeaderClearance, Lo as formatEventPriceDisplay, Lr as EMPTY_COMMERCE_CART_STATE, Ls as isObjectRecord, Lu as composeEventHandlers, Ma as inferLegacyOfferingsPreviewGroupOrder, Mc as setContextResolveImageUrlContext, Mf as __toESM, Mi as resolveVisiblePromotedFieldPathsForEditorBlock, Ml as Select, Mn as projectRecurringSchedule, Mo as toLocationMapHydrationProps, Mr as buildCartDisplay, Ms as parseGeneratedIconAssetId, Mu as useId$1, Na as isOfferingsPreviewSourceKey, Nc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Nd as Trash2, Ni as componentRuntimeRulesForTheme, Nl as SelectContent, Nn as siteFooterManifest, No as formatDate$3, Nr as buildProductCardDisplay, Ns as parseGeneratedIconSetId, Nt as useDebouncedLatestSave, Nu as useDirection, Oc as renderVideo, Od as lucide_react_exports, Of as ArrowDown, Oi as retargetCompiledBoundaryRuntimeForContentAdjacency, Ol as TooltipProvider, On as gradientToCss, Oo as getTextColorForBackground, Or as buildProductDetailInteractiveIslandProps, Os as getBlockIconSemanticId, Ot as redoHistory, Ou as __read, Pa as normalizeOfferingsPreviewGroupOrder, Pc as resolveMediaSlotContract, Pd as Ticket, Pl as SelectItem, Pn as siteHeaderManifest, Po as formatEventCompactDateRail, Pr as buildProductDetailDisplay, Ps as parseSiteIconStyleGuideVersionId, Pt as createRoutingHelpers, Pu as createCollection, Q as enqueueTransaction, Qa as columnOptionSchema, Qc as generateBaseInteractiveCSS, Qd as Image, Qi as INPUT_SPACING_MAP, Ql as ScrollableDialogContent, Qn as buildNewsletterFormInteractiveIslandProps, Qo as createInteractiveIslandCodec, Qr as singleButtonFragment, Qs as CheckIcon$1, Qt as applyPageDesignEditorAction, Qu as formatBookingInstant, Ra as resolveOfferingsPreviewGroupOrderEntries, Rc as formatAspectRatioToken, Ri as isThemeV2NormalEditorRawStyleFieldName, Rl as Badge, Rn as visibleHeaderClearancePx, Ro as formatEventTeacherLine, Rr as buildPassCartItem, Rs as isRecord$21, Ru as Primitive, Sa as expandPalette, Sc as ImagePresets, Sd as unsafeAsMediaAssetId, Sf as ChevronRight, Si as mergeHeaderNavTypographyPreference, Sl as mapOptionValueForSelect, Sn as CSS, So as generateShadowValue, Sr as normalizeEventRegistrationPageSurfaceSubject, Ss as parseFeatureCardGeneratedIconSizePx, St as useEditorUiStoreInstance, Su as DropdownMenuSeparator, Ta as runTransforms, Tc as computeMediaTransformStyle, Td as unsafeAsPositiveSeconds, Tf as Check, Ti as PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, Tl as useField, Tn as useIsomorphicLayoutEffect, To as isCssColorLiteral, Tr as cartBlockDefinition, Ts as suggestSemanticIconForFeatureCard, Tt as canUndoHistory, Tu as __awaiter, Ua as eventListPaginationActionSchema, Uc as getImageUrl, Ui as parseBlockCustomCssRules, Ul as Input, Un as formattingTransforms, Uo as resolveEventCta, Ur as reduceCommerceCart, Us as isIconPickerPreset, Ut as validateBlockManifestIssues, Uu as clsx, Va as resolveSpacing, Vc as asRecord, Vd as Search, Vi as getComponentBorderWidthPx, Vl as PopoverContent, Vn as layoutTransforms, Vo as getContainerClass, Vr as parseStoredCommerceCartState, Vs as isInlineTextEmpty, Vt as recoveryConflictCopy, Vu as useComposedRefs, Wa as eventPageSizeSchema, Wc as getAtPath, Wd as Plus, Wi as parseCustomCssRules, Wl as Tabs, Wn as createManifestValidator, Wo as resolveEventLinkProps, Wr as augmentManifest, Ws as resolveIconPickerPreset, Wt as ManifestForm, Wu as createEditorInsertBlockCommand, X as confirmAutosaveBatch, Xa as normalizeOptionalId, Xc as generateEffectsCSS, Xi as FONT_WEIGHT_MAP, Xl as Root2$1, Xn as productDetailBlockDefinition, Xo as blockBookingPaymentTermsSchema, Xr as faqHeadingFragment, Xs as ArrowRightIcon, Xt as listContentTypes, Xu as formatBookingDate, Y as beginAutosaveBatch, Ya as normalizeCsvString, Yc as generateButtonCss, Yd as Minus, Yi as NAV_LINK_TEXT_SIZE_MAP, Yl as List, Yn as productListBlockDefinition, Yo as resolveRuntimeEventPricing, Yr as faqAccordionFragment, Ys as ArrowLeftIcon, Yt as createStoreBackend, Yu as addLocalScheduleDays, Z as deriveTransactionCapabilities, Za as calendarTabViewsSchema, Zc as generateShadowValue$1, Zd as LoaderCircle, Zi as INPUT_FONT_SIZE_MAP, Zl as Trigger$1, Zn as newsletterSignupBlockDefinition, Zo as buildInteractiveIslandProps, Zr as blogFeaturedPostFragment, Zs as CalendarIcon$1, Zt as toRoutableLinkPayload, Zu as formatBookingDateTime, _c as PlayIcon, _d as parseSiteId, _f as CircleMinus, _i as BACKGROUND_POSITION_PRESET_VALUES, _l as useBlockContext, _n as useDndContext, _o as normalizeEventSurfacePresetsCsv, _r as getWizardStepsForContext$1, _s as mediaSchema, _t as EntryControllerProvider, aa as boundaryRuntimeMetricsForTransition, ac as ClockIcon$1, ad as toScheduledBookingDateTime, af as FileSpreadsheet, ai as heroCtaRowFragment, al as cssVarValue, an as mutateBlockContent, ao as eventCalendarListLayoutCompatibleDisplayModeValues, ar as formBlockDefinition, as as markEditableSurfaceForwarding, at as PreviewTextEditor, au as DialogTitle, bc as UploadIcon, bd as unsafeAsCustomerPassId, bf as ChevronsUpDown, bi as resolveSurfaceForegroundStyles, bl as hasEmptyOption, bn as useSensor, bo as publicEventSchema, br as courseRegistrationBlockDefinition, bs as createFeatureCardIconKey, bu as DropdownMenuItem, ca as sectionTransitionFamilyForBoundaryOptionId, cc as FileArchiveIcon, cd as publicEventPricingCurrency, cf as FileArchive, ci as bodyCopyFragment, cl as textColorStyle, cn as decodePublicProductCategorySelectorQuery, co as when, cr as buildEventRegistrationInteractiveIslandProps, cs as asDesignBlockId, ct as RichTextEditorSurface, da as backgroundAppearanceColorTokenNames, dc as FileTextIcon, dd as publicEventScalarPrice, df as EllipsisVertical, di as siteOptionSources, dl as surfaceForegroundValue, dn as AMBIENT_BACKGROUND_ROLES$1, do as eventScheduleScopeValues, dr as findPreSelectedEvent, ds as ACCORDION_SPACING_MAP, dt as InlineTextEditor, du as Trigger, ec as ChevronLeftIcon, ed as formatLocalScheduleDate, ef as ImagePlus, ei as formEmbedFragment, el as TokenResolver, en as createBlock, eo as eventCalendarDefaultViewSchema, er as buildEventListingInteractiveIslandProps, es as createZodCodec, et as rejectAutosaveBatch, eu as DialogClose, fa as backgroundAppearanceQuickColorTokenNames, fc as InfoIcon, fd as publicEventTicketTypes, ff as Crop, fi as MQ_LG_UP, fl as useBackendWatch, fn as DndContext, fo as eventSurfaceScopeValues, fr as resolveDiscountContext, fs as ACCORDION_TRIGGER_FONT_SCALE, ft as EditorProvider, fu as createCollapsibleScope, g as PreviewDesignCoordinatorProvider, gc as PhoneIcon, gd as parseMediaAssetId, gf as CirclePlus, gi as MQ_TABLET_ONLY, gl as isNonEmptyValue, gn as getClientRect, go as normalizeEventStaffMemberId, gr as getStepNumber$1, gs as PUBLIC_DOWNLOAD_MEDIA_TYPES, gt as EditableBlockProvider, gu as CardTitle, ha as defaultThemeTokens, hc as MinusIcon, hd as expectParsedBrandedId, hf as Clock3, hi as MQ_SM_UP, hl as isHeaderField, hn as closestCenter, ho as normalizeEventScheduleScope, hr as WIZARD_STEPS$1, hs as ICON_SIZE_PX, ht as useUISelector, hu as CardHeader, i as usePreviewDesignHistoryOrder, ic as CirclePlusIcon, id as toBookingTimeZone, if as FileText, ii as ctaCopyFragment, il as borderColorStyle, io as weekStartSchema, ir as buildEventCalendarListingRender, is as composeHeaderSectionWrapperClassName, it as PreviewInlineTextEditor, iu as DialogHeader, ja as buildOfferingsPreviewRenderStates, jc as resolveMediaStorageUrl, jf as __exportAll, ji as planPageDesignLayoutLookCompatibility, jl as Slider, jn as listBlockDescriptors, jo as normalizeLocationMapProps, jr as getShopDisplayForItems, js as resolveBlockIconRenderValue, jt as recordsEqual, ju as __spreadArrays, kc as resolveImageUrlWithContext, kd as X, kf as Archive, ki as retargetCompiledRuntimeFieldsForContentAdjacency, kl as TooltipTrigger, kn as GRADIENT_PRESETS, ko as featuresFromHex, kr as buildProductListInteractiveIslandProps, ks as getGeneratedBlockIconStyleState, kt as undoHistory, ku as __rest, la as sectionTransitionVariantForBoundaryOptionId, lc as FileAudioIcon, ld as publicEventPricingMode, li as defineFragment, ll as DEFAULT_SURFACE_TEXT_COLOR, ln as DEFAULT_LAUNCH_READINESS_INPUT, lo as bindingSchema, lr as toRegistrationEvents, ls as assertNever$6, lt as getRichTextImagePositionFromTarget, lu as Content, ma as parseBackgroundAppearanceColorToken, mc as MapPinIcon$1, md as assertNever$5, mf as Copy, mi as MQ_SM_DOWN, ml as getModalConfig, mn as PointerSensor, mo as normalizeEventCategoryIdsCsv, mr as resolveRegistrationTarget, ms as ICON_CONFIG, mu as CardContent, n as useSiteChromeCustomizeOptional, nc as ChevronUpIcon, nd as parseBookingLocalDate, nf as GripVertical, ni as testimonialsCarouselFragment, nl as themeButtonClassName, nn as deleteBlock, no as filterAutoShowSchema, nr as buildEventCalendarInteractiveIslandProps, ns as defineProgressiveBlockRuntime, nt as resolvePreviewSidebarTab, nu as DialogDescription, oa as defaultSectionTransitionVariantForFamily, oc as DownloadIcon, od as parseEventPageSurfaceSubject, of as FilePlay, oi as ctaRowFragment, ol as mergeStyles, on as reorderBlocks, oo as eventCalendarListLayoutOptions, or as buildFormInteractiveIslandProps, os as splitPositioningClasses, ot as useRichTextEditor, ou as Collapsible, pa as foregroundTokenForBackgroundAppearanceColorToken, pc as MailIcon, pd as formatCurrencyAmount, pf as CreditCard, pi as MQ_MD_DOWN, pl as getFieldIntent, pn as KeyboardCode, po as normalizeEventBlockKind, pr as resolveEventRequiresPayment, ps as ACCORDION_TRIGGER_LETTER_SPACING, pt as useEditor, pu as Card, qa as resolveEventListPaginationAction, qi as NAV_LINK_PADDING_MAP, ql as TabsTrigger, qn as useImageResolveContextOptional, qo as getLocalDateKey, qr as headingFragment, qs as isSemanticIconId, qt as FormRenderer, qu as unsafeAsEditorBlockId, r as PreviewDesignHistoryOrderProvider, rc as CircleMinusIcon, rd as resolveBookingTimeZoneId, rf as File, ri as testimonialsHeadingFragment, rl as backgroundColorStyle, rn as deleteEntrySlotBlock, ro as previewStageSchema, rr as buildEventCalendarListingDisplay, rt as PreviewRichTextEditor, ru as DialogFooter, sa as sectionTransitionFamilies, sc as ExternalLinkIcon, sd as formatBookingPriceDisplay, sf as FileHeadphone, si as heroCopyFragment, sl as rgbColorValue, sn as reorderEntrySlotBlocks, so as el, sr as eventRegistrationBlockDefinition, ss as planSiteChromePlacement, st as EMPTY_DOC, su as CollapsibleContent, t as SiteChromeCustomizeProvider, tc as ChevronRightIcon, td as getBookingLocalDateKey, tf as ImageOff, ti as formCopyFragment, tl as parseThemeButtonVariantId, tn as createEntrySlotBlock, to as eventLayoutSchema, tr as eventCalendarBlockDefinition, ts as defineClientOwnedBlockRuntime, tu as DialogContent, ua as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, uc as FileSpreadsheetIcon, ud as publicEventPricingType, uf as EyeOff, ui as PUBLIC_FILE_FIELD_KINDS, ul as surfaceForegroundDeclarations, un as deriveLaunchReadiness, uo as eventBlockKindValues, ur as findEventByOccurrenceId, us as ACCORDION_OPEN_ACCENT_THICKNESS, ut as insertOrReplaceRichTextImage, uu as Root, v as PreviewThemeOverlayProvider, vc as PlusIcon, vd as unsafeAsAppointmentResourceId, vf as CircleCheck, vi as getAnchorClasses, vl as SdkConfigProvider, vn as useDraggable, vo as normalizeEventSurfaceScope, vr as giftingBlockDefinition, vs as FEATURE_CARD_GENERATED_ICON_SIZE_PX, vu as DropdownMenu, wa as createTransformRegistry, wc as buildResolveImageUrlContext, wd as unsafeAsPositiveByteCount$1, wf as ChevronDown, wi as formatSiteChromeBackgroundTokenLabel, wl as FieldFrame, wn as useCombinedRefs, wo as normalizeCardVariantRole, wr as checkoutBlockDefinition, ws as shouldReserveFeatureCardIconZone, wt as canRedoHistory, wu as __assign, xc as XIcon, xd as unsafeAsFormId, xf as ChevronUp, xi as resolveBackgroundColorValue, xl as mapCurrentValueForSelect, xn as useSensors, xo as generateCardCss, xr as buildCourseRegistrationInteractiveIslandProps, xs as getFeatureCardIconCompletion, xt as useEditorUiStore, y as usePreviewThemeOverlay, yc as ShoppingCartIcon, yd as unsafeAsAppointmentServiceId, yf as CircleAlert, yi as boxStylesTransforms, yl as useSdkConfig, yn as useDroppable, yo as normalizeEventVenueId, yr as buildGiftingInteractiveIslandProps, ys as FEATURE_CARD_ICON_TREATMENTS, yt as useEntryEditorController, yu as DropdownMenuContent, za as resolveOfferingsPreviewGroups, zc as parseAspectRatioValue, zi as isThemeV2NormalEditorRawStylePath, zn as contentTransforms, zo as formatTime$3, zr as buildProductCartItem, zs as coerceInlineTextWithFallback, zt as PaletteProvider, zu as Button } from "./SiteChromeCustomizeContext-C_sizso-.mjs";
3
- import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-D0tnKl0t.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-BPcJPzdz.mjs";
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";
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";
@@ -1973,10 +1973,10 @@ function useBlockApi() {
1973
1973
  }
1974
1974
  //#endregion
1975
1975
  //#region ../blocks/src/primitives/layout/Section.tsx
1976
- const Section = forwardRef(function Section({ as: Comp = "section", children, background, className = "", allowOverflow = false, style, "data-slot": dataSlot }, ref) {
1976
+ const Section = forwardRef(function Section({ as: Comp = "section", children, background, className = "", style, "data-slot": dataSlot }, ref) {
1977
1977
  return /* @__PURE__ */ jsx(Comp, {
1978
1978
  ref,
1979
- className: clsx("rb-relative rb-isolate", allowOverflow ? "rb-overflow-visible" : "rb-overflow-hidden", className),
1979
+ className: clsx("rb-relative rb-isolate rb-overflow-visible", className),
1980
1980
  style: mergeStyles(typeof background === "string" && background.trim().length > 0 ? backgroundColorStyle(background.trim()) : void 0, style),
1981
1981
  "data-slot": dataSlot ?? "section",
1982
1982
  children
@@ -2097,10 +2097,7 @@ function Grid({ as: Comp = "div", cols = {
2097
2097
  }
2098
2098
  //#endregion
2099
2099
  //#region ../blocks/src/system/runtime/nodes/layout.tsx
2100
- const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, allowOverflow, ...props }) => /* @__PURE__ */ jsx(Section, {
2101
- ...props,
2102
- allowOverflow
2103
- });
2100
+ const SectionNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Section, { ...props });
2104
2101
  const StackNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Stack, { ...props });
2105
2102
  const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Inline, { ...props });
2106
2103
  const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
@@ -2611,6 +2608,58 @@ function getCtaIconComponent(name) {
2611
2608
  return CTA_ICON_COMPONENTS[name] ?? null;
2612
2609
  }
2613
2610
  //#endregion
2611
+ //#region ../blocks/src/system/icons/social.tsx
2612
+ const SOCIAL_ICON_NAMES = [
2613
+ "SocialFacebook",
2614
+ "SocialInstagram",
2615
+ "SocialLinkedIn",
2616
+ "SocialTikTok",
2617
+ "SocialX",
2618
+ "SocialYouTube"
2619
+ ];
2620
+ const socialIcons = {
2621
+ SocialFacebook: createIcon("SocialFacebookIcon", /* @__PURE__ */ jsx("path", { d: "M14 8h3V4h-3c-3 0-5 2-5 5v3H6v4h3v6h4v-6h3l1-4h-4V9c0-.7.3-1 1-1Z" })),
2622
+ SocialInstagram: createIcon("SocialInstagramIcon", /* @__PURE__ */ jsxs(Fragment$1, { children: [
2623
+ /* @__PURE__ */ jsx("rect", {
2624
+ x: "3",
2625
+ y: "3",
2626
+ width: "18",
2627
+ height: "18",
2628
+ rx: "5"
2629
+ }),
2630
+ /* @__PURE__ */ jsx("circle", {
2631
+ cx: "12",
2632
+ cy: "12",
2633
+ r: "4"
2634
+ }),
2635
+ /* @__PURE__ */ jsx("circle", {
2636
+ cx: "17.5",
2637
+ cy: "6.5",
2638
+ r: ".75",
2639
+ fill: "currentColor",
2640
+ stroke: "none"
2641
+ })
2642
+ ] })),
2643
+ SocialLinkedIn: createIcon("SocialLinkedInIcon", /* @__PURE__ */ jsxs(Fragment$1, { children: [
2644
+ /* @__PURE__ */ jsx("path", { d: "M6 9v10" }),
2645
+ /* @__PURE__ */ jsx("path", {
2646
+ d: "M6 5.5v.01",
2647
+ strokeWidth: "3"
2648
+ }),
2649
+ /* @__PURE__ */ jsx("path", { d: "M10.5 19v-6a4 4 0 0 1 8 0v6" }),
2650
+ /* @__PURE__ */ jsx("path", { d: "M10.5 9v10" })
2651
+ ] })),
2652
+ SocialTikTok: createIcon("SocialTikTokIcon", /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("path", { d: "M14 4v11.5a4.5 4.5 0 1 1-4-4.47" }), /* @__PURE__ */ jsx("path", { d: "M14 4c.7 3 2.4 4.5 5 4.5" })] })),
2653
+ SocialX: createIcon("SocialXIcon", /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("path", { d: "m5 4 14 16" }), /* @__PURE__ */ jsx("path", { d: "M19 4 5 20" })] })),
2654
+ SocialYouTube: createIcon("SocialYouTubeIcon", /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("path", { d: "M21 12c0 3.5-.5 5.5-1.3 6.3S16.5 19.5 12 19.5s-6.9-.4-7.7-1.2S3 15.5 3 12s.5-5.5 1.3-6.3S7.5 4.5 12 4.5s6.9.4 7.7 1.2S21 8.5 21 12Z" }), /* @__PURE__ */ jsx("path", { d: "m10 9 5 3-5 3Z" })] }))
2655
+ };
2656
+ function isSocialIconName(value) {
2657
+ return typeof value === "string" && SOCIAL_ICON_NAMES.includes(value);
2658
+ }
2659
+ function getSocialIconComponent(value) {
2660
+ return isSocialIconName(value) ? socialIcons[value] : null;
2661
+ }
2662
+ //#endregion
2614
2663
  //#region ../blocks/src/system/icons/registry.ts
2615
2664
  function buildSearchText(parts) {
2616
2665
  return parts.map((part) => part.trim()).filter(Boolean).join(" ");
@@ -2646,10 +2695,10 @@ function getIconPickerOptionsForPreset(preset) {
2646
2695
  return ICON_PICKER_OPTIONS_BY_PRESET[preset];
2647
2696
  }
2648
2697
  function isKnownIconName(value) {
2649
- return isCtaIconName(value) || isSemanticIconId(value);
2698
+ return isCtaIconName(value) || isSemanticIconId(value) || isSocialIconName(value);
2650
2699
  }
2651
2700
  function getIconComponent(name) {
2652
- return getCtaIconComponent(name) ?? getSemanticIconComponent(name);
2701
+ return getCtaIconComponent(name) ?? getSemanticIconComponent(name) ?? getSocialIconComponent(name);
2653
2702
  }
2654
2703
  //#endregion
2655
2704
  //#region ../blocks/src/system/runtime/nodes/buttonAffordance.ts
@@ -3537,7 +3586,6 @@ const HeaderSectionNode$1 = ({ blockId, children, className, "data-preview-site-
3537
3586
  const asProp = rest.as;
3538
3587
  const styleProp = rest.style;
3539
3588
  const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
3540
- const allowOverflowProp = typeof rest.allowOverflow === "boolean" ? rest.allowOverflow : void 0;
3541
3589
  const dataSlotProp = typeof rest["data-slot"] === "string" ? rest["data-slot"] : void 0;
3542
3590
  return /* @__PURE__ */ jsxs("nav", {
3543
3591
  ...getIslandRootProps("headerSection", blockId),
@@ -3552,7 +3600,6 @@ const HeaderSectionNode$1 = ({ blockId, children, className, "data-preview-site-
3552
3600
  as: asProp,
3553
3601
  style: styleProp,
3554
3602
  background: backgroundProp ?? "background",
3555
- allowOverflow: allowOverflowProp,
3556
3603
  "data-slot": dataSlotProp,
3557
3604
  className: sectionClasses || void 0,
3558
3605
  children
@@ -7192,7 +7239,7 @@ function resolveGroupFrame(cardStyles) {
7192
7239
  contentClassName: "offerings-preview-card-content rb-flex rb-h-full rb-min-h-full rb-flex-col rb-gap-5"
7193
7240
  };
7194
7241
  return {
7195
- containerClassName: ["offerings-preview-card offerings-preview-card--framed rb-relative rb-isolate rb-h-full rb-min-h-full rb-overflow-hidden rb-bg-surface rb-border rb-border-border", resolveGroupFrameClasses(cardStyles)].filter(Boolean).join(" "),
7242
+ containerClassName: ["offerings-preview-card offerings-preview-card--framed rb-relative rb-isolate rb-h-full rb-min-h-full rb-overflow-visible rb-bg-surface rb-border rb-border-border", resolveGroupFrameClasses(cardStyles)].filter(Boolean).join(" "),
7196
7243
  containerStyle: resolveGroupFrameStyle(cardStyles),
7197
7244
  contentClassName: "card-content offerings-preview-card-content rb-flex rb-h-full rb-min-h-full rb-flex-col rb-gap-5"
7198
7245
  };
@@ -7454,6 +7501,39 @@ function headingDecoration({ bindFrom = defaultBindFrom, className } = {}) {
7454
7501
  } } })], when(`${bindFrom}.family`));
7455
7502
  }
7456
7503
  //#endregion
7504
+ //#region ../blocks/src/system/fragments/library/footerBottomText.ts
7505
+ const footerBottomTextFragment = defineFragment({
7506
+ id: "footerBottomText",
7507
+ title: "Footer Text",
7508
+ description: "Rich text content for the main footer body and optional bottom bar.",
7509
+ fields: [{
7510
+ id: "bodyText",
7511
+ type: "richText",
7512
+ label: "Body text",
7513
+ description: "Appears in the main footer area.",
7514
+ ui: { variant: "limited" }
7515
+ }, {
7516
+ id: "bottomText",
7517
+ type: "richText",
7518
+ label: "Bottom bar text",
7519
+ description: "Appears in the optional footer bottom bar.",
7520
+ ui: { variant: "limited" }
7521
+ }],
7522
+ layout: [richText({
7523
+ className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
7524
+ style: textColorStyle("text/80")
7525
+ }, when("bodyText"), bind("bodyText", { transforms: [{
7526
+ id: "content.interpolateRichTextTokens",
7527
+ options: { tokens: ["year", "site_name"] }
7528
+ }] })), richText({
7529
+ className: "rb-prose rb-prose-sm rb-mx-auto rb-max-w-3xl rb-text-center",
7530
+ style: textColorStyle("text/80")
7531
+ }, when("bottomText"), bind("bottomText", { transforms: [{
7532
+ id: "content.interpolateRichTextTokens",
7533
+ options: { tokens: ["year", "site_name"] }
7534
+ }] }))]
7535
+ });
7536
+ //#endregion
7457
7537
  //#region ../blocks/src/system/fragments/library/headerCta.ts
7458
7538
  const headerCtaFragment = defineFragment({
7459
7539
  id: "headerCta",
@@ -24994,7 +25074,6 @@ const HeaderSectionNode = ({ blockId, blockKind, blockContent, fragmentRegistry,
24994
25074
  const asProp = restProps.as;
24995
25075
  const styleProp = restProps.style;
24996
25076
  const backgroundProp = typeof restProps.background === "string" ? restProps.background : void 0;
24997
- const allowOverflowProp = typeof restProps.allowOverflow === "boolean" ? restProps.allowOverflow : void 0;
24998
25077
  const dataSlotProp = typeof restProps["data-slot"] === "string" ? restProps["data-slot"] : void 0;
24999
25078
  return /* @__PURE__ */ jsx("nav", {
25000
25079
  ref: (el) => {
@@ -25016,7 +25095,6 @@ const HeaderSectionNode = ({ blockId, blockKind, blockContent, fragmentRegistry,
25016
25095
  as: asProp,
25017
25096
  style: styleProp,
25018
25097
  background: backgroundProp ?? "background",
25019
- allowOverflow: allowOverflowProp,
25020
25098
  "data-slot": dataSlotProp,
25021
25099
  className: sectionClasses || void 0,
25022
25100
  children
@@ -28182,16 +28260,17 @@ const backgroundTransforms = [
28182
28260
  run: (value, _options, context) => resolveSurfaceForegroundStyles(value, context)
28183
28261
  },
28184
28262
  {
28185
- id: "background.resolveAllowOverflow",
28263
+ id: "background.resolveFrameClassName",
28186
28264
  kind: "formatter",
28187
- summary: "Resolve allowOverflow from background config (explicit overflow or scaled image)",
28188
- run: (value) => {
28189
- if (!value || typeof value !== "object") return false;
28265
+ summary: "Resolve clipping on a decorative background frame without clipping foreground content",
28266
+ run: (value, options) => {
28267
+ const baseClass = options?.baseClass?.trim() ?? "";
28268
+ if (!value || typeof value !== "object") return `${baseClass} rb-overflow-hidden`.trim();
28190
28269
  const input = value;
28191
- if (input.overflow === true) return true;
28270
+ if (input.overflow === true) return `${baseClass} rb-overflow-visible`.trim();
28192
28271
  const objectFit = isString$1(input.objectFit) ? input.objectFit.trim() : null;
28193
28272
  const scale = isString$1(input.scale) ? input.scale.trim() : isNumber$1(input.scale) ? String(input.scale) : null;
28194
- return Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0);
28273
+ return `${baseClass} ${Boolean((objectFit === "custom" || objectFit === "original") && scale && scale.trim().length > 0) ? "rb-overflow-visible" : "rb-overflow-hidden"}`.trim();
28195
28274
  }
28196
28275
  },
28197
28276
  {
@@ -29544,9 +29623,9 @@ function isReactNode(value) {
29544
29623
  * Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.
29545
29624
  */
29546
29625
  function resolveNode(node, context, indexFallback) {
29547
- if (!shouldRenderNode(node, context)) return null;
29548
29626
  const scopeContext = applyScopes(node, context);
29549
29627
  if (node.$repeat) return resolveRepeater(node, scopeContext);
29628
+ if (!shouldRenderNode(node, scopeContext)) return null;
29550
29629
  const registry = scopeContext.registry ?? serverComponentRegistry;
29551
29630
  const normalizedType = node.type.toLowerCase();
29552
29631
  const component = registry[node.type] ?? registry[normalizedType] ?? (normalizedType === "section" ? SectionNode : void 0);
@@ -30913,6 +30992,19 @@ Object.keys(NAV_LINK_PRESETS);
30913
30992
  //#region ../theme-core/src/header/generateHeaderCss.ts
30914
30993
  const HEADER_BLUR = "blur(12px)";
30915
30994
  const FLOATING_BLUR = "blur(16px)";
30995
+ const INSET_SHELL_MARKER_CLASS = "header-bar-frame-inset-shell";
30996
+ const INSET_SHELL_EDGE = "1rem";
30997
+ const INSET_SHELL_INSET_BLOCK = "0.875rem";
30998
+ const INSET_SHELL_RADIUS = "9999px";
30999
+ const INSET_SHELL_CONTAINER_MAX = "80rem";
31000
+ const INSET_SHELL_INTERIOR_PADDING_X = "1.75rem";
31001
+ /**
31002
+ * Whether the classic header should render as an inset "brand capsule" shell.
31003
+ * The facet is only meaningful for the classic layout; other variants ignore it.
31004
+ */
31005
+ function usesInsetShell(header) {
31006
+ return header.barFrame === "inset-shell" && header.variant === "classic";
31007
+ }
30916
31008
  /**
30917
31009
  * Generate complete CSS for header system from theme config
30918
31010
  *
@@ -31012,7 +31104,36 @@ function generateHeaderRootStyles(header, themeId, tokens, _theme) {
31012
31104
  const baseBlock = `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
31013
31105
  const overlayFix = `\n${`${selector}:has([data-nav-mobile-overlay][aria-hidden="false"])`} {\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n`;
31014
31106
  if (isContainedNav || backgroundRules.length === 0) return `${baseBlock}\n${overlayFix}`;
31015
- return `${baseBlock}\n${`\n${backgroundSelector} {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border-radius: inherit;\n z-index: -1;\n ${backgroundRules.join("\n ")}\n}\n`}\n${overlayFix}`;
31107
+ return `${baseBlock}\n${`\n${backgroundSelector} {\n content: \"\";\n position: absolute;\n inset: 0;\n pointer-events: none;\n border-radius: inherit;\n z-index: -1;\n ${backgroundRules.join("\n ")}\n}\n`}\n${overlayFix}${usesInsetShell(header) ? generateInsetShellStyles(header, themeId) : ""}`;
31108
+ }
31109
+ /**
31110
+ * Reshapes the full-bleed header paint layer into a contained brand capsule at
31111
+ * the desktop breakpoint. The capsule is centred, capped to the page container
31112
+ * width, inset from the top, fully rounded, and carries the header depth so it
31113
+ * reads as a floating pill. Root border/shadow are neutralised on desktop so a
31114
+ * bordered style does not leave a full-width hairline around the capsule. Sticky
31115
+ * positioning is unaffected — the root stays full width and sticky while the
31116
+ * ::before paint provides the capsule.
31117
+ */
31118
+ function generateInsetShellStyles(header, themeId) {
31119
+ const scope = `:where([data-theme-scope="${themeId}"])`;
31120
+ const shellRootSelector = `${scope} .header-root.${INSET_SHELL_MARKER_CLASS}`;
31121
+ const shellBeforeSelector = `${scope} .header-root.${INSET_SHELL_MARKER_CLASS}::before`;
31122
+ const layoutSelector = `${scope} .header-root.${INSET_SHELL_MARKER_CLASS} .rb-header-layout`;
31123
+ const widthValue = header.maxWidth === "full" ? `calc(100% - (${INSET_SHELL_EDGE} * 2))` : `min(${INSET_SHELL_CONTAINER_MAX}, calc(100% - (${INSET_SHELL_EDGE} * 2)))`;
31124
+ const shadowVar = getComponentShadowVar(header.shadow?.elevation ?? "none");
31125
+ const rootRules = ["border: none;", "box-shadow: none;"];
31126
+ const beforeRules = [
31127
+ `inset: ${INSET_SHELL_INSET_BLOCK} auto;`,
31128
+ "left: 50%;",
31129
+ "right: auto;",
31130
+ "transform: translateX(-50%);",
31131
+ `width: ${widthValue};`,
31132
+ `border-radius: ${INSET_SHELL_RADIUS};`,
31133
+ ...shadowVar ? [`box-shadow: ${shadowVar};`] : []
31134
+ ];
31135
+ const layoutRules = [`padding-inline: ${INSET_SHELL_INTERIOR_PADDING_X};`];
31136
+ return `\n@media ${MQ_MD_UP} {\n${shellRootSelector} {\n ${rootRules.join("\n ")}\n}\n${shellBeforeSelector} {\n ${beforeRules.join("\n ")}\n}\n${layoutSelector} {\n ${layoutRules.join("\n ")}\n}\n}\n`;
31016
31137
  }
31017
31138
  /**
31018
31139
  * Generate logo typography styles
@@ -31090,7 +31211,7 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
31090
31211
  */
31091
31212
  function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
31092
31213
  const navPreferences = {
31093
- typography: header.navTypography ?? "inherit",
31214
+ typography: header.navFontRole ?? header.navTypography ?? "inherit",
31094
31215
  fontSize: readHeaderNavFontSizePreference(header.navTextSize)
31095
31216
  };
31096
31217
  if (header.navLinkStyle) return generateNavLinkCSS({
@@ -35416,6 +35537,12 @@ const containerResponsiveThemeCss = `/*
35416
35537
  .rb-lg-hidden {
35417
35538
  display: none;
35418
35539
  }
35540
+ .rb-lg-flex-row {
35541
+ flex-direction: row;
35542
+ }
35543
+ .rb-lg-items-center {
35544
+ align-items: center;
35545
+ }
35419
35546
  }
35420
35547
 
35421
35548
  }
@@ -46852,7 +46979,7 @@ const containerResponsiveThemeCss = `/*
46852
46979
  [data-block="feature-cards"][data-block-composition="asymmetric-emphasis"]
46853
46980
  .rb-feature-card {
46854
46981
  height: auto;
46855
- overflow: hidden;
46982
+ overflow: visible;
46856
46983
  border: 0;
46857
46984
  border-radius: 0;
46858
46985
  background: transparent;
@@ -58420,7 +58547,8 @@ function buildInsertBlockHistoryCommand({ block, index, draftContent, publishedC
58420
58547
  draftContent: toEditorBlockValues(baseline),
58421
58548
  publishedContent: toEditorBlockValues(nextPublishedContent),
58422
58549
  bindings: toEditorBlockValues(block.bindings ?? null),
58423
- purpose
58550
+ purpose,
58551
+ optimisticHash: block.optimisticHash ?? null
58424
58552
  }, {
58425
58553
  id: blockId,
58426
58554
  version: 0,
@@ -58431,7 +58559,8 @@ function buildInsertBlockHistoryCommand({ block, index, draftContent, publishedC
58431
58559
  kind: block.kind,
58432
58560
  purpose,
58433
58561
  orderIndex: index,
58434
- publishedContent: toEditorBlockValues(nextPublishedContent)
58562
+ publishedContent: toEditorBlockValues(nextPublishedContent),
58563
+ optimisticHash: block.optimisticHash ?? null
58435
58564
  }
58436
58565
  }, index);
58437
58566
  }
@@ -58441,6 +58570,8 @@ function blockEditorOwnerKey(owner) {
58441
58570
  switch (owner.kind) {
58442
58571
  case "page": return `page:${owner.pageId}`;
58443
58572
  case "entry-slot": return `entry-slot:${owner.type}:${owner.entryId}:${owner.slotKey}`;
58573
+ case "surface-slot": return `surface-slot:${owner.pageSurfaceId}:${owner.slotKey}`;
58574
+ default: return assertNever$5(owner);
58444
58575
  }
58445
58576
  }
58446
58577
  async function createEditableBlockForOwner(apiClient, siteId, owner, input) {
@@ -58462,6 +58593,16 @@ async function createEditableBlockForOwner(apiClient, siteId, owner, input) {
58462
58593
  position: input.position,
58463
58594
  purpose: input.purpose
58464
58595
  });
58596
+ case "surface-slot": return createPageSurfaceSlotBlock(apiClient, {
58597
+ siteId,
58598
+ pageSurfaceId: owner.pageSurfaceId,
58599
+ slotKey: owner.slotKey,
58600
+ kind: input.kind,
58601
+ position: input.position,
58602
+ purpose: input.purpose,
58603
+ expectedCompositionHash: owner.compositionHash
58604
+ });
58605
+ default: return assertNever$5(owner);
58465
58606
  }
58466
58607
  }
58467
58608
  async function reorderEditableBlocksForOwner(apiClient, siteId, owner, blockIds) {
@@ -58478,6 +58619,14 @@ async function reorderEditableBlocksForOwner(apiClient, siteId, owner, blockIds)
58478
58619
  slotKey: owner.slotKey,
58479
58620
  blockIds
58480
58621
  });
58622
+ case "surface-slot": return reorderPageSurfaceSlotBlocks(apiClient, {
58623
+ siteId,
58624
+ pageSurfaceId: owner.pageSurfaceId,
58625
+ slotKey: owner.slotKey,
58626
+ blockIds,
58627
+ expectedCompositionHash: owner.compositionHash
58628
+ });
58629
+ default: return assertNever$5(owner);
58481
58630
  }
58482
58631
  }
58483
58632
  async function deleteEditableBlockForOwner(apiClient, siteId, owner, blockId) {
@@ -58494,11 +58643,23 @@ async function deleteEditableBlockForOwner(apiClient, siteId, owner, blockId) {
58494
58643
  slotKey: owner.slotKey,
58495
58644
  blockId
58496
58645
  });
58646
+ case "surface-slot": return deletePageSurfaceSlotBlock(apiClient, {
58647
+ siteId,
58648
+ pageSurfaceId: owner.pageSurfaceId,
58649
+ slotKey: owner.slotKey,
58650
+ blockId,
58651
+ expectedCompositionHash: owner.compositionHash
58652
+ });
58653
+ default: return assertNever$5(owner);
58497
58654
  }
58498
58655
  }
58656
+ function surfaceCompositionHashFromResponse(response) {
58657
+ if (typeof response === "object" && response !== null && "compositionHash" in response && typeof response.compositionHash === "string") return response.compositionHash;
58658
+ return null;
58659
+ }
58499
58660
  //#endregion
58500
58661
  //#region ../editor-blocks/src/block-editor/hooks/useBlockCreation.ts
58501
- function useBlockCreation({ allowCreation, apiClient, siteId, owner, blockList, setBlockList, onBlocksChange, triggerFocus, uiStore }) {
58662
+ function useBlockCreation({ allowCreation, apiClient, siteId, owner, blockList, setBlockList, onBlocksChange, triggerFocus, uiStore, onStructuralRevisionChange }) {
58502
58663
  const [pickerOpen, setPickerOpen] = useState(false);
58503
58664
  const [insertPosition, setInsertPosition] = useState(null);
58504
58665
  const [creatingBlockName, setCreatingBlockName] = useState(null);
@@ -58526,11 +58687,14 @@ function useBlockCreation({ allowCreation, apiClient, siteId, owner, blockList,
58526
58687
  setCreatingBlockName(descriptor.name);
58527
58688
  setErrorMessage(null);
58528
58689
  try {
58529
- const newBlock = (await createEditableBlockForOwner(apiClient, siteId, owner, {
58690
+ const response = await createEditableBlockForOwner(apiClient, siteId, owner, {
58530
58691
  kind: descriptor.name,
58531
58692
  position: insertPosition,
58532
58693
  purpose: "content"
58533
- })).block;
58694
+ });
58695
+ const nextCompositionHash = surfaceCompositionHashFromResponse(response);
58696
+ if (nextCompositionHash) onStructuralRevisionChange?.(nextCompositionHash);
58697
+ const newBlock = response.block;
58534
58698
  const updated = [...blockList];
58535
58699
  updated.splice(insertPosition, 0, {
58536
58700
  ...newBlock,
@@ -58576,6 +58740,7 @@ function useBlockCreation({ allowCreation, apiClient, siteId, owner, blockList,
58576
58740
  creatingBlockName,
58577
58741
  insertPosition,
58578
58742
  onBlocksChange,
58743
+ onStructuralRevisionChange,
58579
58744
  owner,
58580
58745
  setBlockList,
58581
58746
  siteId,
@@ -58591,7 +58756,7 @@ function getDuplicateDraftContent(block) {
58591
58756
  if (!source || typeof source !== "object" || Array.isArray(source)) return null;
58592
58757
  return JSON.parse(JSON.stringify(source));
58593
58758
  }
58594
- function useBlockDuplication({ allowCreation, apiClient, siteId, owner, blockList, setBlockList, onBlocksChange, triggerFocus, setErrorMessage, uiStore }) {
58759
+ function useBlockDuplication({ allowCreation, apiClient, siteId, owner, blockList, setBlockList, onBlocksChange, triggerFocus, setErrorMessage, uiStore, onStructuralRevisionChange }) {
58595
58760
  const [duplicatingBlockId, setDuplicatingBlockId] = useState(null);
58596
58761
  return {
58597
58762
  duplicatingBlockId,
@@ -58607,18 +58772,27 @@ function useBlockDuplication({ allowCreation, apiClient, siteId, owner, blockLis
58607
58772
  setDuplicatingBlockId(blockId);
58608
58773
  setErrorMessage(null);
58609
58774
  let createdBlockId = null;
58775
+ let ownerAfterCreate = owner;
58610
58776
  try {
58611
- const createdBlock = (await createEditableBlockForOwner(apiClient, siteId, owner, {
58777
+ const response = await createEditableBlockForOwner(apiClient, siteId, owner, {
58612
58778
  kind: sourceBlock.kind,
58613
58779
  position: insertIndex,
58614
58780
  purpose,
58615
58781
  duplicatedFromBlockId: blockId
58616
- })).block;
58782
+ });
58783
+ const createdCompositionHash = surfaceCompositionHashFromResponse(response);
58784
+ ownerAfterCreate = owner.kind === "surface-slot" && createdCompositionHash ? {
58785
+ ...owner,
58786
+ compositionHash: createdCompositionHash
58787
+ } : owner;
58788
+ if (createdCompositionHash) onStructuralRevisionChange?.(createdCompositionHash);
58789
+ const createdBlock = response.block;
58617
58790
  if (!createdBlock.id) throw new Error("Duplicate block did not return a block id");
58618
58791
  createdBlockId = createdBlock.id;
58619
58792
  if (draftContent) await mutateBlockContent(apiClient, {
58620
58793
  siteId,
58621
58794
  blockId: createdBlock.id,
58795
+ optimisticHash: createdBlock.optimisticHash ?? null,
58622
58796
  data: draftContent
58623
58797
  });
58624
58798
  const insertedBlock = {
@@ -58650,7 +58824,8 @@ function useBlockDuplication({ allowCreation, apiClient, siteId, owner, blockLis
58650
58824
  }
58651
58825
  } catch (error) {
58652
58826
  if (createdBlockId) try {
58653
- await deleteEditableBlockForOwner(apiClient, siteId, owner, createdBlockId);
58827
+ const nextCompositionHash = surfaceCompositionHashFromResponse(await deleteEditableBlockForOwner(apiClient, siteId, ownerAfterCreate, createdBlockId));
58828
+ if (nextCompositionHash) onStructuralRevisionChange?.(nextCompositionHash);
58654
58829
  } catch {}
58655
58830
  const message = error instanceof Error ? error.message : "Failed to duplicate block";
58656
58831
  console.error("[useBlockDuplication] duplicate failed:", message, error);
@@ -58664,6 +58839,7 @@ function useBlockDuplication({ allowCreation, apiClient, siteId, owner, blockLis
58664
58839
  blockList,
58665
58840
  duplicatingBlockId,
58666
58841
  onBlocksChange,
58842
+ onStructuralRevisionChange,
58667
58843
  owner,
58668
58844
  setBlockList,
58669
58845
  setErrorMessage,
@@ -58682,7 +58858,7 @@ function blockIdsEqual(left, right) {
58682
58858
  if (left.length !== right.length) return false;
58683
58859
  return left.every((blockId, index) => blockId === right[index]);
58684
58860
  }
58685
- function useBlockReorder({ allowReordering, apiClient, siteId, owner, blockList, setBlockList, onBlocksChange, setErrorMessage, uiStore }) {
58861
+ function useBlockReorder({ allowReordering, apiClient, siteId, owner, blockList, setBlockList, onBlocksChange, setErrorMessage, uiStore, onStructuralRevisionChange }) {
58686
58862
  const [reorderId, setReorderId] = useState(null);
58687
58863
  const applyReorder = useCallback(async (updated, original) => {
58688
58864
  if (!allowReordering) return;
@@ -58690,7 +58866,8 @@ function useBlockReorder({ allowReordering, apiClient, siteId, owner, blockList,
58690
58866
  const nextBlockIds = getBlockIds(updated);
58691
58867
  uiStore?.getState().history.applyCommand?.({ ...createEditorReorderBlocksCommand(nextBlockIds.map((blockId) => unsafeAsEditorBlockId(blockId))) });
58692
58868
  try {
58693
- await reorderEditableBlocksForOwner(apiClient, siteId, owner, nextBlockIds);
58869
+ const nextCompositionHash = surfaceCompositionHashFromResponse(await reorderEditableBlocksForOwner(apiClient, siteId, owner, nextBlockIds));
58870
+ if (nextCompositionHash) onStructuralRevisionChange?.(nextCompositionHash);
58694
58871
  onBlocksChange?.(updated);
58695
58872
  } catch (error) {
58696
58873
  const message = error instanceof Error ? error.message : "Failed to reorder blocks";
@@ -58707,6 +58884,7 @@ function useBlockReorder({ allowReordering, apiClient, siteId, owner, blockList,
58707
58884
  allowReordering,
58708
58885
  apiClient,
58709
58886
  onBlocksChange,
58887
+ onStructuralRevisionChange,
58710
58888
  owner,
58711
58889
  setBlockList,
58712
58890
  siteId,
@@ -60509,6 +60687,7 @@ const SortableBlockItem = memo(function SortableBlockItem({ siteId, block, onMov
60509
60687
  })
60510
60688
  });
60511
60689
  return /* @__PURE__ */ jsx("div", {
60690
+ "data-block-editor-client-ready": mounted ? "true" : "false",
60512
60691
  ref: (node) => {
60513
60692
  sortable.setNodeRef(node);
60514
60693
  if (node) blockRef.current = node;
@@ -60576,7 +60755,7 @@ function getGeneratedIconSetErrorMessage(error) {
60576
60755
  const message = getApiRequestErrorMessage(error);
60577
60756
  return message === "Internal server error" || /^Request to .+ failed with status \d+$/u.test(message) ? GENERATED_ICON_SET_FRIENDLY_ERROR : message;
60578
60757
  }
60579
- const BlockEditor = forwardRef(function BlockEditor({ siteId, dashboardBaseUrl, owner, blocks, recoveryConflictBlockIds = [], recoveryConflictReviewRequestId = null, apiClient, uiStore, enableReordering = true, enableCreation = true, enableDeletion = true, onBlockSave, onBlocksChange, theme, widgetOverrides, headerLeftSlot, hideThemeV2RawStyleFields = false, pageDesignEditorModel = null, enabledContentTypes = [], sdkConfig = null, customBlocks = [], allowedBlockKinds = null, emptyUnavailableMessage = "No blocks available for this page.", initialCollapsed = true, reorderControlMode = DEFAULT_REORDER_CONTROL_MODE, actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION }, ref) {
60758
+ const BlockEditor = forwardRef(function BlockEditor({ siteId, dashboardBaseUrl, owner, blocks, recoveryConflictBlockIds = [], recoveryConflictReviewRequestId = null, apiClient, uiStore, enableReordering = true, enableCreation = true, enableDeletion = true, onBlockSave, onBlocksChange, onStructuralRevisionChange, theme, widgetOverrides, headerLeftSlot, hideThemeV2RawStyleFields = false, pageDesignEditorModel = null, enabledContentTypes = [], sdkConfig = null, customBlocks = [], allowedBlockKinds = null, emptyUnavailableMessage = "No blocks available for this page.", initialCollapsed = true, reorderControlMode = DEFAULT_REORDER_CONTROL_MODE, actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION }, ref) {
60580
60759
  const [blockList, setBlockList] = useState(() => normalizeBlockListInitial(blocks));
60581
60760
  const [errorMessage, setErrorMessage] = useState(null);
60582
60761
  const [highlightedBlockId, setHighlightedBlockId] = useState(null);
@@ -60601,8 +60780,21 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, dashboardBaseUrl,
60601
60780
  const conflictedBlockIdSet = useMemo(() => new Set(recoveryConflictBlockIds), [recoveryConflictBlockIds]);
60602
60781
  const blockIds = useMemo(() => blockList.map((block) => block.id).filter((blockId) => typeof blockId === "string"), [blockList]);
60603
60782
  const pageDesignBlockById = useMemo(() => new Map((pageDesignEditorModel?.blocks ?? []).map((block) => [String(block.blockId), block])), [pageDesignEditorModel]);
60783
+ const ownerKey = useMemo(() => blockEditorOwnerKey(owner), [owner]);
60784
+ const [surfaceCompositionHash, setSurfaceCompositionHash] = useState(owner.kind === "surface-slot" ? owner.compositionHash : null);
60785
+ const updateStructuralRevision = useCallback((revision) => {
60786
+ setSurfaceCompositionHash(revision);
60787
+ onStructuralRevisionChange?.(revision);
60788
+ }, [onStructuralRevisionChange]);
60789
+ useEffect(() => {
60790
+ setSurfaceCompositionHash(owner.kind === "surface-slot" ? owner.compositionHash : null);
60791
+ }, [ownerKey, owner.kind === "surface-slot" ? owner.compositionHash : null]);
60792
+ const mutationOwner = useMemo(() => owner.kind === "surface-slot" ? {
60793
+ ...owner,
60794
+ compositionHash: surfaceCompositionHash ?? owner.compositionHash
60795
+ } : owner, [owner, surfaceCompositionHash]);
60604
60796
  const { isCollapsed, setCollapsed } = useBlockExpandState({
60605
- pageId: useMemo(() => blockEditorOwnerKey(owner), [owner]),
60797
+ pageId: ownerKey,
60606
60798
  blockIds,
60607
60799
  initialCollapsed
60608
60800
  });
@@ -60833,41 +61025,45 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, dashboardBaseUrl,
60833
61025
  allowCreation: canCreateBlocks,
60834
61026
  apiClient,
60835
61027
  siteId,
60836
- owner,
61028
+ owner: mutationOwner,
60837
61029
  blockList,
60838
61030
  setBlockList,
60839
61031
  onBlocksChange,
60840
61032
  triggerFocus,
60841
- uiStore
61033
+ uiStore,
61034
+ onStructuralRevisionChange: updateStructuralRevision
60842
61035
  });
60843
61036
  const { reorderId, handleMove, onDragEnd } = useBlockReorder({
60844
61037
  allowReordering,
60845
61038
  apiClient,
60846
61039
  siteId,
60847
- owner,
61040
+ owner: mutationOwner,
60848
61041
  blockList,
60849
61042
  setBlockList,
60850
61043
  onBlocksChange,
60851
61044
  setErrorMessage,
60852
- uiStore
61045
+ uiStore,
61046
+ onStructuralRevisionChange: updateStructuralRevision
60853
61047
  });
60854
61048
  const { duplicatingBlockId, duplicateBlock } = useBlockDuplication({
60855
61049
  allowCreation: canCreateBlocks,
60856
61050
  apiClient,
60857
61051
  siteId,
60858
- owner,
61052
+ owner: mutationOwner,
60859
61053
  blockList,
60860
61054
  setBlockList,
60861
61055
  onBlocksChange,
60862
61056
  triggerFocus,
60863
61057
  setErrorMessage,
60864
- uiStore
61058
+ uiStore,
61059
+ onStructuralRevisionChange: updateStructuralRevision
60865
61060
  });
60866
61061
  const handleDelete = useCallback(async (blockId) => {
60867
61062
  try {
60868
61063
  setErrorMessage(null);
60869
61064
  if (!blockList.find((block) => block.id === blockId)) return;
60870
- await deleteEditableBlockForOwner(apiClient, siteId, owner, blockId);
61065
+ const nextCompositionHash = surfaceCompositionHashFromResponse(await deleteEditableBlockForOwner(apiClient, siteId, mutationOwner, blockId));
61066
+ if (nextCompositionHash) updateStructuralRevision(nextCompositionHash);
60871
61067
  const updatedList = blockList.filter((b) => b.id !== blockId);
60872
61068
  setBlockList(updatedList);
60873
61069
  if (uiStore) uiStore.getState().history.applyCommand?.({ ...createEditorRemoveBlockCommand(unsafeAsEditorBlockId(blockId)) });
@@ -60879,11 +61075,12 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, dashboardBaseUrl,
60879
61075
  }, [
60880
61076
  apiClient,
60881
61077
  siteId,
60882
- owner,
61078
+ mutationOwner,
60883
61079
  blockList,
60884
61080
  setBlockList,
60885
61081
  onBlocksChange,
60886
- uiStore
61082
+ uiStore,
61083
+ updateStructuralRevision
60887
61084
  ]);
60888
61085
  useEffect(() => {
60889
61086
  return () => {
@@ -65719,7 +65916,8 @@ function localRuntimeDraftForBlock(input) {
65719
65916
  kind: block.blockKind,
65720
65917
  purpose: null,
65721
65918
  orderIndex: null,
65722
- publishedContent: null
65919
+ publishedContent: null,
65920
+ optimisticHash: null
65723
65921
  }
65724
65922
  };
65725
65923
  }
@@ -65774,8 +65972,8 @@ function PreviewPageDesignEditorStateProvider({ apiClient, siteId, pageId, enabl
65774
65972
  if (!cancelled) setWorkflowState(previewCustomizeLoadSucceeded(nextState));
65775
65973
  }).catch((error) => {
65776
65974
  if (cancelled) return;
65777
- if (!(error instanceof ApiRequestError)) console.error("[preview-page-design-editor-state] Unexpected load failure", error);
65778
- setWorkflowState(failedPreviewCustomizeWorkflowState(error instanceof ApiRequestError ? error.message : PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE));
65975
+ reportPreviewDesignError("Failed to load page design editor state", error);
65976
+ setWorkflowState(failedPreviewCustomizeWorkflowState(PREVIEW_DESIGN_LOAD_ERROR_MESSAGE));
65779
65977
  });
65780
65978
  return () => {
65781
65979
  cancelled = true;
@@ -66062,20 +66260,23 @@ function actionWithCurrentBaseContentId(action, editorModel) {
66062
66260
  }
66063
66261
  }
66064
66262
  function classifyApplyActionError(error) {
66065
- const message = error instanceof Error ? error.message : "Failed to save design change.";
66066
66263
  if (error instanceof ApiRequestError) {
66067
66264
  if (error.status === 409) return {
66068
66265
  kind: "stale",
66069
66266
  message: PREVIEW_CUSTOMIZE_STALE_MESSAGE
66070
66267
  };
66071
- if (error.status === 400 || error.status === 422) return {
66072
- kind: "invalid",
66073
- message
66074
- };
66268
+ if (error.status === 400 || error.status === 422) {
66269
+ reportPreviewDesignError("Failed to apply page design change", error);
66270
+ return {
66271
+ kind: "invalid",
66272
+ message: PREVIEW_DESIGN_SAVE_ERROR_MESSAGE
66273
+ };
66274
+ }
66075
66275
  }
66276
+ reportPreviewDesignError("Failed to apply page design change", error);
66076
66277
  return {
66077
66278
  kind: "failed",
66078
- message
66279
+ message: PREVIEW_DESIGN_SAVE_ERROR_MESSAGE
66079
66280
  };
66080
66281
  }
66081
66282
  function usePreviewPageDesignEditorState() {
@@ -66212,7 +66413,8 @@ function PreviewEntryControllerProvider({ children, siteId, pageId, routeId: pro
66212
66413
  content: b.content ?? null,
66213
66414
  draftContent: b.draftContent ?? null,
66214
66415
  publishedContent: b.publishedContent ?? null,
66215
- bindings: b.bindings ?? null
66416
+ bindings: b.bindings ?? null,
66417
+ optimisticHash: b.optimisticHash ?? null
66216
66418
  }));
66217
66419
  }, [initialBlocks]);
66218
66420
  const entityId = pageId || entryData?.id || "";
@@ -66220,20 +66422,30 @@ function PreviewEntryControllerProvider({ children, siteId, pageId, routeId: pro
66220
66422
  const entityLabel = entryData ? "Entry" : "Page";
66221
66423
  const routeId = providedRouteId ?? void 0;
66222
66424
  const initialContent = entryData ? draftContent ?? entryData.content ?? {} : null;
66223
- return /* @__PURE__ */ jsx(EntryControllerProvider, {
66425
+ const common = {
66224
66426
  apiClient,
66225
- kind: entryData ? "content" : "page",
66226
66427
  type: entityType || "page",
66227
66428
  siteId,
66228
- entryId: entityId,
66429
+ owner: {
66430
+ kind: "contentEntry",
66431
+ contentEntryId: entityId
66432
+ },
66229
66433
  routeId,
66230
66434
  schema,
66231
66435
  entityLabel,
66232
66436
  initialEntry,
66437
+ initialBlocks: normalizedInitialBlocks,
66438
+ historyShortcutsEnabled: isEditingMode
66439
+ };
66440
+ return entryData ? /* @__PURE__ */ jsx(EntryControllerProvider, {
66441
+ ...common,
66442
+ kind: "content",
66233
66443
  initialContent,
66444
+ children
66445
+ }) : /* @__PURE__ */ jsx(EntryControllerProvider, {
66446
+ ...common,
66447
+ kind: "page",
66234
66448
  initialStatus,
66235
- initialBlocks: normalizedInitialBlocks,
66236
- historyShortcutsEnabled: isEditingMode,
66237
66449
  children
66238
66450
  });
66239
66451
  }
@@ -67228,6 +67440,74 @@ function PreviewChromeFloatingControl({ anchorSelector, anchorTargetSelector, pl
67228
67440
  children
67229
67441
  }), layer.portalTarget)] });
67230
67442
  }
67443
+ function PreviewChromeFloatingBar({ anchorSelector, gapPx = 8, children }) {
67444
+ const layer = usePreviewChromeLayerOptional();
67445
+ const probeRef = useRef(null);
67446
+ const [position, setPosition] = useState(null);
67447
+ const [themeCustomProperties, setThemeCustomProperties] = useState({});
67448
+ useEffect(() => {
67449
+ if (!layer?.portalTarget) return;
67450
+ const portalTarget = layer.portalTarget;
67451
+ let resizeObserver = null;
67452
+ let observedAnchor = null;
67453
+ const update = () => {
67454
+ const anchor = probeRef.current?.closest(anchorSelector);
67455
+ if (anchor !== observedAnchor) {
67456
+ resizeObserver?.disconnect();
67457
+ observedAnchor = anchor;
67458
+ if (anchor && typeof ResizeObserver !== "undefined") {
67459
+ resizeObserver = new ResizeObserver(update);
67460
+ resizeObserver.observe(anchor);
67461
+ }
67462
+ }
67463
+ if (!anchor) {
67464
+ setPosition(null);
67465
+ return;
67466
+ }
67467
+ const anchorRect = anchor.getBoundingClientRect();
67468
+ const layerRect = portalTarget.getBoundingClientRect();
67469
+ const placement = anchorRect.top >= 56 ? "above" : "below";
67470
+ setThemeCustomProperties(readThemeCustomProperties(anchor));
67471
+ setPosition({
67472
+ left: anchorRect.left - layerRect.left,
67473
+ top: placement === "above" ? anchorRect.top - layerRect.top - gapPx : anchorRect.bottom - layerRect.top + gapPx,
67474
+ width: anchorRect.width,
67475
+ placement
67476
+ });
67477
+ };
67478
+ update();
67479
+ const unsubscribe = layer.subscribeLayout(update);
67480
+ return () => {
67481
+ resizeObserver?.disconnect();
67482
+ unsubscribe();
67483
+ };
67484
+ }, [
67485
+ anchorSelector,
67486
+ gapPx,
67487
+ layer
67488
+ ]);
67489
+ if (!layer?.portalTarget) return /* @__PURE__ */ jsx("div", {
67490
+ className: "absolute inset-x-0 bottom-full z-20 mb-2",
67491
+ children
67492
+ });
67493
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
67494
+ ref: probeRef,
67495
+ "aria-hidden": "true",
67496
+ style: { display: "contents" }
67497
+ }), position ? createPortal(/* @__PURE__ */ jsx("div", {
67498
+ "data-preview-chrome-floating-bar": "",
67499
+ "data-placement": position.placement,
67500
+ className: "pointer-events-auto absolute z-[80]",
67501
+ style: {
67502
+ ...themeCustomProperties,
67503
+ left: position.left,
67504
+ top: position.top,
67505
+ width: position.width,
67506
+ transform: position.placement === "above" ? "translateY(-100%)" : void 0
67507
+ },
67508
+ children
67509
+ }), layer.portalTarget) : null] });
67510
+ }
67231
67511
  function readThemeCustomProperties(element) {
67232
67512
  if (typeof window === "undefined") return {};
67233
67513
  const computedStyle = window.getComputedStyle(element);
@@ -67646,6 +67926,7 @@ function CustomizeBackgroundControlRows({ modeLabel, valueLabel, valueAriaLabel,
67646
67926
  //#region ../preview-next/src/client/preview/SiteChromeCustomizeButton.tsx
67647
67927
  function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-events-auto absolute right-2 top-2 z-50 opacity-0 transition group-focus-within/site-chrome:opacity-100 group-hover/site-chrome:opacity-100" }) {
67648
67928
  const customize = useSiteChromeCustomizeOptional();
67929
+ const editorUiStore = useOptionalEditorUiStoreInstance();
67649
67930
  const popover = useCustomizePopoverController();
67650
67931
  const [backgroundChooserOpen, setBackgroundChooserOpen] = useState(false);
67651
67932
  const popoverSide = useSiteChromeCustomizePopoverSide({
@@ -67797,13 +68078,18 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
67797
68078
  onClick: (event) => {
67798
68079
  event.preventDefault();
67799
68080
  event.stopPropagation();
67800
- requestPreviewSidebarOpen({
68081
+ if (surfaceState.surface === "footer") {
68082
+ const editorUi = editorUiStore?.getState();
68083
+ editorUi?.inspectFooter();
68084
+ editorUi?.setPreviewSidebarTab("editor");
68085
+ editorUi?.setDrawerOpen(true);
68086
+ } else requestPreviewSidebarOpen({
67801
68087
  tab: "editor",
67802
- designRow: surfaceState.surface === "header" ? "header-style" : "footer"
68088
+ designRow: "header-style"
67803
68089
  });
67804
68090
  popover.close();
67805
68091
  },
67806
- children: "More options"
68092
+ children: surfaceState.surface === "footer" ? "Edit footer" : "More options"
67807
68093
  })
67808
68094
  }),
67809
68095
  surfaceState.diagnostics.length > 0 ? /* @__PURE__ */ jsx("ul", {
@@ -67969,7 +68255,7 @@ function renderEditableSurface(children, surface, options) {
67969
68255
  if (isValidElement(child) && child.type !== Fragment && (isHostElement(child) || options.preserveSingleComponentRoot || isEditableSurfaceForwardingElement(child))) return cloneElement(child, {
67970
68256
  className: joinClassNames(child.props.className, "group/site-chrome relative"),
67971
68257
  "data-preview-site-chrome-surface": surface,
67972
- children: /* @__PURE__ */ jsxs(Fragment$1, { children: [child.props.children, /* @__PURE__ */ jsx(SiteChromeCustomizeButton, { surface })] })
68258
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [surface === "footer" ? /* @__PURE__ */ jsx(FooterModuleInspectionSurface, { children: child.props.children }) : child.props.children, /* @__PURE__ */ jsx(SiteChromeCustomizeButton, { surface })] })
67973
68259
  });
67974
68260
  if (surface === "header") return /* @__PURE__ */ jsxs("div", {
67975
68261
  className: "group/site-chrome",
@@ -67983,7 +68269,66 @@ function renderEditableSurface(children, surface, options) {
67983
68269
  return /* @__PURE__ */ jsxs("div", {
67984
68270
  className: "group/site-chrome relative",
67985
68271
  "data-preview-site-chrome-surface": surface,
67986
- children: [children, /* @__PURE__ */ jsx(SiteChromeCustomizeButton, { surface })]
68272
+ children: [/* @__PURE__ */ jsx(FooterModuleInspectionSurface, { children }), /* @__PURE__ */ jsx(SiteChromeCustomizeButton, { surface })]
68273
+ });
68274
+ }
68275
+ function FooterModuleInspectionSurface({ children }) {
68276
+ const uiStore = useOptionalEditorUiStoreInstance();
68277
+ const rootRef = useRef(null);
68278
+ const [active, setActive] = useState(null);
68279
+ const [position, setPosition] = useState(null);
68280
+ useEffect(() => {
68281
+ const root = rootRef.current;
68282
+ if (!root) return;
68283
+ const modules = root.querySelectorAll("[data-preview-footer-module-id]");
68284
+ for (const module of modules) {
68285
+ module.tabIndex = 0;
68286
+ const label = module.dataset.previewFooterModuleId?.replace(/-/gu, " ") ?? "footer section";
68287
+ module.setAttribute("aria-label", `Edit ${label}`);
68288
+ }
68289
+ }, [children]);
68290
+ const activateElement = (element) => {
68291
+ if (!element) return;
68292
+ const parsed = parseFooterModuleId(element.dataset.previewFooterModuleId);
68293
+ if (!parsed.ok) return;
68294
+ const label = element.dataset.previewFooterModuleId?.replace(/-/gu, " ") ?? "footer section";
68295
+ const rect = element.getBoundingClientRect();
68296
+ setActive({
68297
+ moduleId: parsed.value,
68298
+ label
68299
+ });
68300
+ setPosition({
68301
+ top: Math.max(8, rect.top + 8),
68302
+ left: Math.max(8, rect.right - 64)
68303
+ });
68304
+ };
68305
+ const inspect = (moduleId) => {
68306
+ uiStore?.getState().inspectFooterModule(moduleId);
68307
+ uiStore?.getState().setPreviewSidebarTab("editor");
68308
+ uiStore?.getState().setDrawerOpen(true);
68309
+ };
68310
+ return /* @__PURE__ */ jsxs("div", {
68311
+ ref: rootRef,
68312
+ style: { display: "contents" },
68313
+ onMouseOver: (event) => activateElement(event.target.closest("[data-preview-footer-module-id]")),
68314
+ onFocusCapture: (event) => activateElement(event.target.closest("[data-preview-footer-module-id]")),
68315
+ onKeyDown: (event) => {
68316
+ if (event.key !== "Enter" && event.key !== " ") return;
68317
+ const element = event.target.closest("[data-preview-footer-module-id]");
68318
+ if (!element) return;
68319
+ const parsed = parseFooterModuleId(element.dataset.previewFooterModuleId);
68320
+ if (!parsed.ok) return;
68321
+ event.preventDefault();
68322
+ inspect(parsed.value);
68323
+ },
68324
+ children: [children, active && position && uiStore ? /* @__PURE__ */ jsx("button", {
68325
+ type: "button",
68326
+ 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
+ style: position,
68328
+ "aria-label": `Edit ${active.label}`,
68329
+ onClick: () => inspect(active.moduleId),
68330
+ children: "Edit"
68331
+ }) : null]
67987
68332
  });
67988
68333
  }
67989
68334
  function isHostElement(child) {
@@ -68224,17 +68569,17 @@ function LinkedEntryEditEventBridge() {
68224
68569
  //#region ../preview-next/src/client/preview/PreviewShellLayout.tsx
68225
68570
  const previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
68226
68571
  const PreviewEditorSidebar = React.lazy(async () => {
68227
- return { default: (await import("./PreviewEditorSidebar-DpAbAl08.mjs")).PreviewEditorSidebar };
68572
+ return { default: (await import("./PreviewEditorSidebar-BBT-kZAM.mjs")).PreviewEditorSidebar };
68228
68573
  });
68229
68574
  const PreviewEditorUI = React.lazy(async () => {
68230
- return { default: (await import("./PreviewEditorUI-O7cn6Xxv.mjs")).PreviewEditorUI };
68575
+ return { default: (await import("./PreviewEditorUI-D69xNKT2.mjs")).PreviewEditorUI };
68231
68576
  });
68232
68577
  const previewPaneContainmentStyle = {
68233
68578
  contain: "layout paint",
68234
68579
  isolation: "isolate",
68235
68580
  transform: "translateZ(0)"
68236
68581
  };
68237
- 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" } }) {
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 }) {
68238
68583
  const layout = useOptionalPreviewLayout();
68239
68584
  const headerNode = layout?.headerNode ?? null;
68240
68585
  const bannerNode = layout?.bannerNode ?? null;
@@ -68439,6 +68784,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68439
68784
  setPreviewSidebarTab(tab);
68440
68785
  setPreviewSidebarActiveTab(tab);
68441
68786
  },
68787
+ onFooterSaved,
68442
68788
  onClose: () => setDrawerOpen(false),
68443
68789
  entrySubrouteContext: entrySubrouteContext ?? null,
68444
68790
  assistantPanel,
@@ -68517,7 +68863,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
68517
68863
  }
68518
68864
  //#endregion
68519
68865
  //#region ../preview-next/src/client/preview/PreviewShell.tsx
68520
- 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 }) {
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 }) {
68521
68867
  const apiClient = useMemo(() => createBearerAPIClient(previewToken, apiBaseUrl), [previewToken, apiBaseUrl]);
68522
68868
  const resolvedDesignEditorEligibility = designEditorEligibility ?? defaultDesignEditorEligibility({
68523
68869
  pageId,
@@ -68592,6 +68938,7 @@ function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug,
68592
68938
  bookingOfferingPresets,
68593
68939
  themeRuntime,
68594
68940
  siteStyleAccess,
68941
+ onFooterSaved,
68595
68942
  children
68596
68943
  })]
68597
68944
  })
@@ -69105,6 +69452,12 @@ function normalizeTextChildren(input) {
69105
69452
  if (Array.isArray(input)) return input.map((item) => normalizeTextChildren(item)).join("");
69106
69453
  return "";
69107
69454
  }
69455
+ function renderPreviewRichTextToolbarHost(toolbar) {
69456
+ return /* @__PURE__ */ jsx(PreviewChromeFloatingBar, {
69457
+ anchorSelector: "[data-rb-preview-richtext-editor]",
69458
+ children: toolbar
69459
+ });
69460
+ }
69108
69461
  const RichTextWithEditor = ({ value, path, linkedEntryField, ...rest }) => {
69109
69462
  const { isEditingMode } = useEditor();
69110
69463
  if (isEditingMode && (path || linkedEntryField)) return /* @__PURE__ */ jsx(PreviewRichTextEditor, {
@@ -69113,6 +69466,7 @@ const RichTextWithEditor = ({ value, path, linkedEntryField, ...rest }) => {
69113
69466
  linkedEntryField,
69114
69467
  onLinkedEntryFieldFocus: dispatchLinkedEntryFieldFocusEvent,
69115
69468
  onBlockFieldFocus: dispatchBlockFieldFocusEventFromPath,
69469
+ renderToolbarHost: renderPreviewRichTextToolbarHost,
69116
69470
  doc: value
69117
69471
  });
69118
69472
  return /* @__PURE__ */ jsx(RichText, {