@riverbankcms/sdk 0.103.0 → 0.104.1
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.
- package/dist/{PreviewEditorSidebar-DkNpCPja.mjs → PreviewEditorSidebar-CmaPXdKu.mjs} +148 -128
- package/dist/{PreviewEditorUI-DeNKtqk3.mjs → PreviewEditorUI-C5xRTh2b.mjs} +3 -3
- package/dist/{PreviewQueryProvider-ZF6TXq5Q.mjs → PreviewQueryProvider-CStABBUh.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-5bCsXK2y.mjs → SdkPreviewModeRuntime-Eks51NcN.mjs} +1204 -566
- package/dist/{SiteChromeCustomizeContext-CO1sTK_W.mjs → SiteChromeCustomizeContext-Bt8zb3qu.mjs} +5330 -4533
- package/dist/_dts/api/src/bookingVerticals.d.ts +64 -1
- package/dist/_dts/api/src/contentRuntime.d.ts +6 -3
- package/dist/_dts/api/src/endpoints.d.ts +10 -3
- package/dist/_dts/api/src/index.d.ts +1 -1
- package/dist/_dts/api/src/siteIcons.d.ts +39 -43
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +36 -7
- package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +3 -3
- package/dist/_dts/block-form/src/widgets/SliderField/sliderValue.d.ts +36 -0
- package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +3 -0
- package/dist/_dts/blocks/src/index.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +29 -29
- package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -0
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +135 -0
- package/dist/_dts/blocks/src/system/icons/generatedAssets.d.ts +28 -0
- package/dist/_dts/blocks/src/system/icons/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/icons/value.d.ts +3 -6
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +240 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +1 -0
- package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +2 -0
- package/dist/_dts/content-editor/src/ui/stores/generatedIconAssetsStore.d.ts +9 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +208 -0
- package/dist/_dts/editor/src/index.d.ts +3 -1
- package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +14 -6
- package/dist/_dts/editor/src/primitives/rich-text/RichTextToolbar.d.ts +23 -4
- package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +6 -0
- package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextLink.d.ts +1 -0
- package/dist/_dts/editor/src/primitives/rich-text/paste.d.ts +10 -0
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +7 -0
- package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +4 -4
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +2 -3
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +4 -4
- package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +4 -4
- package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +3 -3
- package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -3
- package/dist/_dts/editor-blocks/src/block-editor/blockHeaderActionPlan.d.ts +1 -5
- package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +25 -19
- package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +32 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/GeneratedIconLibraryContext.d.ts +28 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/index.d.ts +2 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/loaders.d.ts +7 -0
- package/dist/_dts/preview-next/src/client/preview/CustomizeBackgroundControlRows.d.ts +15 -0
- package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +4 -3
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +4 -3
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +4 -3
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -4
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -4
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +44 -18
- package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +4 -5
- package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +22 -1
- package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +12 -4
- package/dist/_dts/sdk/src/client/management/types.d.ts +3 -0
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +0 -1
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -2
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
- package/dist/_dts/theme-core/src/navigation/types.d.ts +2 -0
- package/dist/_dts/theme-core/src/palette/colors.d.ts +84 -0
- package/dist/_dts/theme-core/src/palette/{variants → curated}/brand-led.d.ts +12 -24
- package/dist/_dts/theme-core/src/palette/{variants → curated}/high-contrast.d.ts +9 -18
- package/dist/_dts/theme-core/src/palette/{variants → curated}/index.d.ts +67 -119
- package/dist/_dts/theme-core/src/palette/{variants → curated}/soft-natural.d.ts +12 -24
- package/dist/_dts/theme-core/src/palette/{variants → curated}/types.d.ts +50 -60
- package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-dark.d.ts +6 -12
- package/dist/_dts/theme-core/src/palette/{variants → curated}/warm-neutral.d.ts +12 -24
- package/dist/_dts/theme-core/src/palette/editorState.d.ts +45 -0
- package/dist/_dts/theme-core/src/palette/index.d.ts +25 -14
- package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +55 -0
- package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +34 -0
- package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +58 -0
- package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +232 -0
- package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +118 -0
- package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +50 -0
- package/dist/_dts/theme-core/src/palette/selection.d.ts +72 -0
- package/dist/_dts/theme-core/src/palette/sitePalettePersistence.d.ts +34 -0
- package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +58 -0
- package/dist/_dts/theme-core/src/schema.d.ts +9 -0
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +22 -22
- package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +31 -9
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +22 -16
- package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +6 -5
- package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +21 -0
- package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +2 -1
- package/dist/cli/index.mjs +7805 -7449
- package/dist/client/{DiscountCodeDisclosure-ChVZwVtS.mjs → DiscountCodeDisclosure-Dit2aItR.mjs} +1 -1
- package/dist/client/{EventCombined.client-PZtXbH6R.mjs → EventCombined.client-BnREyCjf.mjs} +3 -3
- package/dist/client/{EventListing.client-C4AMTXec.mjs → EventListing.client-0uHld51x.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-B0w8_i0u.mjs → LeafletStaticMap-DJcvSfmj.mjs} +1 -1
- package/dist/client/{MagicLinkForm-DF0ZGhIu.mjs → MagicLinkForm-EAsIktfw.mjs} +2 -2
- package/dist/client/{StepIndicator-PccQ89Ct.mjs → StepIndicator-CRR17tYI.mjs} +2 -2
- package/dist/client/{accordion-CTNWT1lk.mjs → accordion-B47HIuuH.mjs} +1 -1
- package/dist/client/{bookingForm-DYixwPqP.mjs → bookingForm-I1E-8F9P.mjs} +6 -6
- package/dist/client/{buttons-CySQwlFs.mjs → buttons-BbPn8OKA.mjs} +1 -1
- package/dist/client/{carousel-W75iYR0M.mjs → carousel-OlM7SyBs.mjs} +1 -1
- package/dist/client/{cart-Ca_DGWQq.mjs → cart-BKpG5jz6.mjs} +3 -3
- package/dist/client/{checkout-STgKTsNh.mjs → checkout-Dmmr6qoU.mjs} +3 -3
- package/dist/client/client.mjs +8706 -8320
- package/dist/client/{courseRegistration-DQI1cu1u.mjs → courseRegistration-CflZiqGk.mjs} +7 -7
- package/dist/client/{eventCalendar-BJrHpofg.mjs → eventCalendar-BvoLWcp-.mjs} +5 -5
- package/dist/client/{eventCombined-DPtqBHaH.mjs → eventCombined-DsrO8t_t.mjs} +2 -2
- package/dist/client/{eventDetails-Brt31CDo.mjs → eventDetails-C3hxgcJm.mjs} +3 -3
- package/dist/client/{eventListing-BrClHJOq.mjs → eventListing-C-hb237X.mjs} +2 -2
- package/dist/client/{eventRegistration-DxlNlVUC.mjs → eventRegistration-B0gyzDGi.mjs} +7 -7
- package/dist/client/{form-Vp5cGzDF.mjs → form-C_RUi6oJ.mjs} +2 -2
- package/dist/client/{headerSection-DL2xjRgW.mjs → headerSection-IKQiD2U0.mjs} +3 -3
- package/dist/client/hooks.mjs +4845 -4663
- package/dist/client/{locationMap-B0EjoXQS.mjs → locationMap-8ZBrMzRJ.mjs} +2 -2
- package/dist/client/{newsletterForm-BlV9VRlq.mjs → newsletterForm-CYk3ucwj.mjs} +2 -2
- package/dist/client/{pricing-DmRD7Tjx.mjs → pricing-B5GmvfIH.mjs} +1 -1
- package/dist/client/{productDetail-BLTQsY2f.mjs → productDetail-BjS2Dqzo.mjs} +3 -3
- package/dist/client/{productList-R8lsMpRs.mjs → productList-BOHvC8My.mjs} +3 -3
- package/dist/client/{propsDecoder-DgAshF92.mjs → propsDecoder-WS6UEJwZ.mjs} +7 -0
- package/dist/client/rendering/client.mjs +3606 -3281
- package/dist/client/rendering/islands.mjs +18 -18
- package/dist/client/rendering.mjs +8569 -8190
- package/dist/client/{shop-DWjyje1s.mjs → shop-CON03-wN.mjs} +6 -6
- package/dist/client/{shop-commerce-CSKCR87d.mjs → shop-commerce-DlqrFgH8.mjs} +5 -5
- package/dist/client/{shop-commerce-store-DxPnE-iN.mjs → shop-commerce-store-l74-Kne6.mjs} +1 -1
- package/dist/client/{shopShared-OOeAkFq7.mjs → shopShared-CQheEXSg.mjs} +2 -2
- package/dist/client/{useDiscountCodeUi-Bp6X7XgG.mjs → useDiscountCodeUi-v6OluyWl.mjs} +1 -1
- package/dist/client/{useEventFilters-B489x9TO.mjs → useEventFilters-BqSTcNOf.mjs} +3 -3
- package/dist/client/{usePolling-BKP66stL.mjs → usePolling-DMfADjIF.mjs} +2 -2
- package/dist/preview-next/before-render.mjs +10 -3
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/middleware.mjs +10 -3
- package/dist/{previewAuthStore-ByPPZqmp.mjs → previewAuthStore-CfquDtTh.mjs} +10 -3
- package/dist/{sdk-runtime-C8whifOy.mjs → sdk-runtime-BUmJ0DaT.mjs} +2 -2
- package/dist/{separator-CM2C5Axs.mjs → separator-Dd-JYok7.mjs} +1 -1
- package/dist/server/components.mjs +9871 -9557
- package/dist/server/config-validation.mjs +4869 -4687
- package/dist/server/config.mjs +4869 -4687
- package/dist/server/data.mjs +4846 -4664
- package/dist/server/index.mjs +11 -4
- package/dist/server/next.mjs +8665 -8344
- package/dist/server/page-converter.mjs +4749 -4575
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +9816 -9586
- package/dist/server/rendering.mjs +9880 -9566
- package/dist/server/routing.mjs +4975 -4704
- package/dist/server/server.mjs +4819 -4630
- package/dist/server/theme-bridge.mjs +207 -114
- package/dist/server/theme.mjs +92 -91
- package/dist/styles/index.css +20 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { $ as PreviewRichTextEditor, $a as eventCalendarListLayoutOptions, $c as getModalConfig, $d as ChevronsUpDown, $i as isThemeV2NormalEditorRawStyleFieldName, $l as CardTitle, $n as buildEventCalendarListingRender, $o as splitPositioningClasses, $r as ctaCopyFragment, $s as PlayIcon, $t as deleteEntrySlotBlock, $u as parseSiteId, Aa as resolveOfferingsPreviewGroupCta, Ac as resolveMediaTransformForAspect, Ad as Minus, Ai as surfaceResolutionContextFromTheme, Al as TabsTrigger, An as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Ao as formatEventPrice, Ar as formatCommercePrice, As as ArrowDownIcon, At as createRoutingHelpers, Au as unsafeAsEditorBlockId, Ba as resolveEventListPaginationAction, Bc as generateShadowValue$1, Bd as FilePlay, Bi as defaultSectionTransitionVariantForFamily, Bl as DialogFooter, Bn as isInternalResolvedLinkValue, Bo as getLocalDateKey, Br as augmentManifestWithStyleGroups, Bs as CirclePlusIcon, Bt as ManifestForm, Bu as resolveBookingTimeZoneId, Ca as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Cc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Cd as RotateCcw, Ci as retargetCompiledRuntimeFieldsForContentAdjacency, Cl as Popover, Cn as isSupportedLoaderEndpoint, Co as featuresFromHex, Cr as buildProductDetailInteractiveIslandProps, Cs as resolveBlockIconRenderValue, Ct as pushHistoryEntry, Cu as cva, Da as normalizeOfferingsPreviewGroupOrder, Dc as normalizeRightAngle, Dl as Tabs, Dn as listBlockDescriptors, Do as formatDate$3, Dr as buildCartDisplay, Ds as SEMANTIC_ICON_DEFINITIONS, Dt as recordsEqual, Du as createEditorInsertBlockCommand, Ea as isOfferingsPreviewSourceKey, Ec as isRotationDimensionSwap, Ed as Pencil, Ei as resolveVisiblePromotedFieldPathsForEditorBlock, El as Input, En as getBlockDefinition, Eo as toLocationMapHydrationProps, Er as getShopDisplayForItems, Es as resolveIconPickerPreset, Et as unsafeAsLinkedContentEntryId, Eu as clsx, Fa as buildEventRuntimeFilters, Fc as siblingPath$1, Fd as ImagePlus, Fl as ScrollableDialogContent, Fn as mediaTransforms, Fo as getContainerClass, Fr as deriveCommerceCheckoutState, Fs as ChevronDownIcon, Ft as PaletteProvider, Fu as formatBookingInstant, G as beginAutosaveBatch, Ga as columnOptionSchema, Gc as themeButtonClassName, Gd as EllipsisVertical, Gi as backgroundAppearanceColorTokenNames, Gn as productDetailBlockDefinition, Go as createInteractiveIslandCodec, Gr as faqHeadingFragment, Gs as FileAudioIcon, Gt as createStoreBackend, Gu as publicEventPricingMode, Ha as normalizeCsvString, Hc as generateInteractiveChildInheritanceCSS, Hd as FileArchive, Hi as sectionTransitionFamilyForBoundaryOptionId, Hl as DialogTitle, Hn as useImageResolveContextOptional, Ho as resolveRuntimeEventPricing, Hr as headingFragment, Hs as DownloadIcon, Hu as toScheduledBookingDateTime, Ia as eventListPaginationActionSchema, Id as GripVertical, Il as Dialog, In as layoutTransforms, Io as groupEventsByDate, Ir as parseStoredCommerceCartState, Is as ChevronLeftIcon, It as usePalette, Iu as formatBookingTime, J as enqueueTransaction, Ja as eventLayoutSchema, Jc as mergeStyles, Jd as Copy, Ji as parseBackgroundAppearanceColorToken, Jl as Trigger, Jn as eventListingBlockDefinition, Jo as defineClientOwnedBlockRuntime, Jr as footerBottomTextFragment, Js as InfoIcon, Jt as applyPageDesignEditorAction, Ju as publicEventTicketTypes, K as confirmAutosaveBatch, Ka as eventButtonVariantSchema, Kc as backgroundColorStyle, Kd as Crop, Ki as backgroundAppearanceQuickColorTokenNames, Kl as Content, Kn as newsletterSignupBlockDefinition, Ko as defineInteractiveIslandMetaKeys, Kr as blogFeaturedPostFragment, Ks as FileSpreadsheetIcon, Kt as listContentTypes, Ku as publicEventPricingType, La as eventPageSizeSchema, Ld as File, Ll as DialogClose, Ln as uiTransforms, Lo as resolveEventCta, Lr as productItemKey, Ls as ChevronRightIcon, Lt as recoveryConflictCopy, Lu as formatLocalScheduleDate, Ma as resolveOfferingsPreviewGroups, Mc as getDirectImageUrlForMediaAsset, Md as LoaderCircle, Ml as List, Mn as planSiteOverlayHeaderClearance, Mo as formatEventTeacherLine, Mr as EMPTY_COMMERCE_CART_STATE, Ms as ArrowRightIcon, Mu as addLocalScheduleDays, Na as isSemanticSpacing, Nc as getImageUrl, Nd as Image, Nl as Root2$1, Nn as visibleHeaderClearancePx, No as formatTime$3, Nr as buildPassCartItem, Ns as CalendarIcon$1, Nu as formatBookingDate, Oa as normalizeOfferingsPreviewItemLimit, Oc as formatAspectRatioToken, Oi as designRuntimeRulesForTheme, Ol as TabsContent, On as siteFooterManifest, Oo as formatEventCompactDateRail, Or as buildProductCardDisplay, Os as getSemanticIconComponent, Ou as createEditorRemoveBlockCommand, Pa as resolveSpacing, Pc as getAtPath, Pd as ImageUp, Pl as Trigger$1, Pn as contentTransforms, Po as getCardOrientation, Pr as buildProductCartItem, Ps as CheckIcon$1, Pu as formatBookingDateTime, Q as resolvePreviewSidebarTab, Qa as eventCalendarListLayoutCompatibleDisplayModeValues, Qc as getFieldIntent, Qd as CircleAlert, Ql as CardHeader, Qn as buildEventCalendarListingDisplay, Qo as markEditableSurfaceForwarding, Qr as testimonialsHeadingFragment, Qs as PhoneIcon, Qt as deleteBlock, Qu as parseMediaAssetId, Ra as getEventRuntimeFiltersKey, Rc as generateButtonCss, Rd as FileText, Rl as DialogContent, Rn as formattingTransforms, Ro as resolveEventLinkProps, Rr as reduceCommerceCart, Rs as ChevronUpIcon, Rt as unfinishedBlockCopy, Ru as getBookingLocalDateKey, Sc as setContextResolveImageUrlContext, Sd as Search, Si as retargetCompiledBoundaryRuntimeForContentAdjacency, Sl as Badge, Sn as useUniqueId, So as getTextColorForBackground, Sr as buildCheckoutInteractiveIslandProps, Ss as parseBlockIconValue, St as createHistoryState, Su as Button, Ta as inferLegacyOfferingsPreviewGroupOrder, Tc as attachRenderableMediaAssetFields, Td as Plus, Ti as planPageDesignLayoutLookCompatibility, Tl as PopoverTrigger, Tn as GRADIENT_PRESETS, To as normalizeLocationMapProps, Tr as buildShopInteractiveIslandProps, Ts as isIconPickerPreset, Tt as undoHistory, Tu as cn$1, Ua as normalizeOptionalId, Uc as TokenResolver, Ui as sectionTransitionVariantForBoundaryOptionId, Ul as Collapsible, Un as shopBlockDefinition, Uo as blockBookingPaymentTermsSchema, Ur as cardFragment, Us as ExternalLinkIcon, Ut as FormRenderer, Uu as formatBookingPriceDisplay, Va as normalizeCsvIds, Vc as generateBaseInteractiveCSS, Vd as FileHeadphone, Vi as sectionTransitionFamilies, Vl as DialogHeader, Vn as ImageResolveContextProvider, Vo as getLocalMinuteOfDay, Vr as richTextFragment, Vs as ClockIcon$1, Vt as createManifestFormAdapter, Vu as toBookingTimeZone, Wa as calendarTabViewsSchema, Wc as parseThemeButtonVariantId, Wd as EyeOff, Wi as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, Wl as CollapsibleContent, Wn as productListBlockDefinition, Wo as buildInteractiveIslandProps, Wr as faqAccordionFragment, Ws as FileArchiveIcon, Wt as evaluateVisibility, Wu as publicEventPricingCurrency, X as rejectAutosaveBatch, Xa as previewStageSchema, Xc as textColorStyle, Xd as CircleMinus, Xl as Card, Xn as eventCalendarBlockDefinition, Xr as formCopyFragment, Xs as MapPinIcon$1, Xt as createBlock, Xu as assertNever$5, Y as idleEditorTransactionQueueState, Ya as filterAutoShowSchema, Yc as rgbColorValue, Yd as CirclePlus, Yi as defaultThemeTokens, Yl as createCollapsibleScope, Yn as buildEventListingInteractiveIslandProps, Yo as defineProgressiveBlockRuntime, Yr as formEmbedFragment, Ys as MailIcon, Yt as getPageDesignEditorState, Yu as formatCurrencyAmount, Za as weekStartSchema, Zc as useBackendWatch, Zd as CircleCheck, Zl as CardContent, Zn as buildEventCalendarInteractiveIslandProps, Zo as composeHeaderSectionWrapperClassName, Zr as testimonialsCarouselFragment, Zs as MinusIcon, Zt as createEntrySlotBlock, Zu as expectParsedBrandedId, _a as createTransformRegistry, _c as renderAudio, _i as mergeHeaderNavTypographyPreference, _l as SelectContent, _n as useSensors, _o as normalizeBoxStylesCardVariant, _r as courseRegistrationBlockDefinition, _s as suggestSemanticIconForFeatureCard, _t as useEditorUiStore, _u as createCollection, aa as parseCustomCssRules, ac as unwrapRichTextRoot, ad as unsafeAsPassId, af as Box, ai as PUBLIC_FILE_FIELD_KINDS, al as hasEmptyOption, an as DEFAULT_LAUNCH_READINESS_INPUT, ao as eventSurfaceScopeValues, ar as findEventByOccurrenceId, as as ACCORDION_TRIGGER_FONT_SCALE, at as getRichTextImagePositionFromTarget, au as DropdownMenuSeparator, bc as resolveMediaNodeResponsiveImage, bi as applyCompiledRuntimeFieldsToContent, bl as SelectValue, bn as useCombinedRefs, bo as resolveOnColorForThemeToken, br as cartBlockDefinition, bs as getBlockIconSemanticFallbackId, bt as canRedoHistory, bu as composeEventHandlers, ca as NAV_LINK_PADDING_MAP, cc as coerceInlineTextWithFallback, cd as err$2, cf as Archive, ci as MQ_MD_DOWN, cl as unmapValueFromSelect, cn as DndContext, co as normalizeEventScheduleScope, cr as resolveEventRequiresPayment, cs as ICON_SIZE_PX, ct as EditorProvider, cu as __awaiter, da as FONT_WEIGHT_MAP, dc as parseInlineTextFromUnknown, dd as X, df as __toESM, di as MQ_TABLET_ONLY, dl as Tooltip, dn as closestCenter, do as normalizeEventSurfaceScope, dr as getStepNumber$1, ds as FEATURE_CARD_ICON_TREATMENTS, dt as useUISelector, du as __read, ea as isThemeV2NormalEditorRawStylePath, ec as PlusIcon, ed as unsafeAsAppointmentResourceId, ef as ChevronUp, ei as heroCtaRowFragment, el as isHeaderField, eo as el, er as formBlockDefinition, es as planSiteChromePlacement, et as PreviewInlineTextEditor, fa as INPUT_FONT_SIZE_MAP, fc as ImagePresets, fd as Upload, fi as BACKGROUND_POSITION_PRESET_VALUES, fl as TooltipContent, fn as getClientRect, fo as normalizeEventVenueId, fr as getWizardStepsForContext$1, fs as applyFeatureCardIconSuggestions, ft as EditableBlockProvider, fu as __rest, g as PreviewDesignCoordinatorProvider, ga as generateCssVars, gc as getCurrentResolveImageUrlContext, gd as Ticket, gi as resolveBackgroundColorValue, gl as Select, gn as useSensor, go as generateShadowValue, gr as buildGiftingInteractiveIslandProps, gs as suggestFeatureCardSemanticIcons, gu as useDirection, ha as expandPalette, hc as computeMediaTransformStyle, hd as Trash2, hi as resolveSectionForegroundStyles, hl as Textarea, hn as useDroppable, ho as statusMutedColorDeclaration, hr as giftingBlockDefinition, hs as shouldReserveFeatureCardIconZone, ht as useEntryEditorController, hu as useId$1, i as usePreviewDesignHistoryOrder, ia as parseBlockCustomCssRules, ic as createRichTextDocFromMarkdown, id as unsafeAsMediaAssetId, if as Check, ii as defineFragment, il as useSdkConfig, in as decodePublicProductCategorySelectorQuery, io as eventScheduleScopeValues, ir as toRegistrationEvents, is as ACCORDION_SPACING_MAP, it as RichTextEditorSurface, ja as resolveOfferingsPreviewGroupOrderEntries, jc as asRecord, jl as Content$1, jn as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, jo as formatEventPriceDisplay, jr as formatInterval, js as ArrowLeftIcon, jt as createSnapshotFromPageRecord, ju as unsafeAsEditorBlockValues, ka as resolveOfferingsPreviewCoursePath, kc as parseAspectRatioValue, ki as getCuratedSiteStyle, kl as TabsList, kn as siteHeaderManifest, ko as formatEventDateParts, kr as buildProductDetailDisplay, ks as isSemanticIconId, kt as useDebouncedLatestSave, ku as createEditorReorderBlocksCommand, la as NAV_LINK_PADDING_X_MAP, lc as inlineTextToPlainText, ld as ok$3, lf as __commonJSMin, li as MQ_SM_DOWN, ll as FieldFrame, ln as KeyboardCode, lo as normalizeEventStaffMemberId, lr as resolveRegistrationTarget, ls as PUBLIC_DOWNLOAD_MEDIA_TYPES, lt as useEditor, lu as __extends, ma as LABEL_FONT_SIZE_MAP, mc as buildResolveImageUrlContext, mi as boxStylesTransforms, ml as TooltipTrigger, mn as useDraggable, mo as generateCardCss, mr as resolveEventRegistrationScopedEvents, ms as getFeatureCardIconCompletion, mu as __spreadArrays, n as useSiteChromeCustomizeOptional, na as getComponentBorderWidthPx, nc as UploadIcon, nd as unsafeAsCustomerPassId, nf as ChevronLeft, ni as heroCopyFragment, nl as useBlockContext, nn as reorderBlocks, no as bindingSchema, nr as eventRegistrationBlockDefinition, ns as assertNever$6, nt as useRichTextEditor, nu as DropdownMenuContent, oa as NAV_LINK_BORDER_RADIUS_MAP, oc as isObjectRecord, od as unsafeAsPositiveByteCount$1, of as ArrowUp, oi as siteOptionSources, ol as mapCurrentValueForSelect, on as deriveLaunchReadiness, oo as normalizeEventBlockKind, or as findPreSelectedEvent, os as ACCORDION_TRIGGER_LETTER_SPACING, ot as insertOrReplaceRichTextImage, ou as DropdownMenuTrigger, pa as INPUT_SPACING_MAP, pc as MediaPlaceholder, pi as getAnchorClasses, pl as TooltipProvider, pn as useDndContext, po as publicEventSchema, pr as normalizeEventRegistrationPageSurfaceSubject, ps as createFeatureCardIconKey, pt as EntryControllerProvider, pu as __spreadArray, q as deriveTransactionCapabilities, qa as eventCalendarDefaultViewSchema, qc as borderColorStyle, qd as CreditCard, qi as foregroundTokenForBackgroundAppearanceColorToken, ql as Root, qn as buildNewsletterFormInteractiveIslandProps, qo as createZodCodec, qr as singleButtonFragment, qs as FileTextIcon, qt as toRoutableLinkPayload, qu as publicEventScalarPrice, r as PreviewDesignHistoryOrderProvider, ra as getComponentShadowVar, rc as XIcon, rd as unsafeAsFormId, rf as ChevronDown, ri as bodyCopyFragment, rl as SdkConfigProvider, rn as reorderEntrySlotBlocks, ro as eventBlockKindValues, rr as buildEventRegistrationInteractiveIslandProps, rs as ACCORDION_OPEN_ACCENT_THICKNESS, rt as EMPTY_DOC, ru as DropdownMenuItem, sa as NAV_LINK_LETTER_SPACING_MAP, sc as isRecord$19, sd as unsafeAsPositiveSeconds, sf as ArrowDown, si as MQ_LG_UP, sl as mapOptionValueForSelect, sn as AMBIENT_BACKGROUND_ROLES$1, so as normalizeEventCategoryIdsCsv, sr as resolveDiscountContext, ss as ICON_CONFIG, st as InlineTextEditor, su as __assign, t as SiteChromeCustomizeProvider, ta as pageDesignEditorBackgroundOverrideOwner, tc as ShoppingCartIcon, td as unsafeAsAppointmentServiceId, tf as ChevronRight, ti as ctaRowFragment, tl as isNonEmptyValue, tn as mutateBlockContent, to as when, tr as buildFormInteractiveIslandProps, ts as asDesignBlockId, tt as PreviewTextEditor, tu as DropdownMenu, ua as NAV_LINK_TEXT_SIZE_MAP, uc as isInlineTextEmpty, ud as lucide_react_exports, uf as __exportAll, ui as MQ_SM_UP, ul as useField, un as PointerSensor, uo as normalizeEventSurfacePresetsCsv, ur as WIZARD_STEPS$1, us as mediaSchema, uu as __generator, v as PreviewThemeOverlayProvider, va as runTransforms, vc as renderVideo, vd as Star, vi as formatSiteChromeBackgroundTokenLabel, vl as SelectItem, vn as CSS, vo as normalizeCardVariantRole, vr as buildCourseRegistrationInteractiveIslandProps, vs as toFeatureCardIconSuggestionInputs, vt as useEditorUiStoreInstance, vu as useControllableState, wa as buildOfferingsPreviewRenderStates, wc as resolveMediaSlotContract, wi as normalEditorCuratedPromotedFieldPaths, wl as PopoverContent, wn as gradientToCss, wo as buildGoogleMapsDirectionsUrl, wr as buildProductListInteractiveIslandProps, ws as parseSiteIconStyleGuideVersionId, wt as redoHistory, wu as useComposedRefs, xc as resolveMediaStorageUrl, xd as Settings, xi as compileEditorModelRuntime, xl as Label, xn as useIsomorphicLayoutEffect, xo as resolveTokenOrCssColorValue, xr as buildCartInteractiveIslandProps, xs as getGeneratedBlockIconStyleState, xt as canUndoHistory, xu as Primitive, y as usePreviewThemeOverlay, ya as ctaButton, yc as resolveImageUrlWithContext, yd as Sparkles, yi as PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, yl as SelectTrigger, yn as isKeyboardEvent, yo as isCssColorLiteral, yr as checkoutBlockDefinition, ys as buildGeneratedBlockIconRenderAssetLookupFromUnknown, yt as useOptionalEditorUiStoreInstance, yu as createContextScope, za as resolveEventCalendarListPageSize, zc as generateEffectsCSS, zd as FileSpreadsheet, zi as boundaryRuntimeMetricsForTransition, zl as DialogDescription, zn as createManifestValidator, zo as getEventAvailability, zr as augmentManifest, zs as CircleMinusIcon, zt as validateBlockManifestIssues, zu as parseBookingLocalDate } from "./SiteChromeCustomizeContext-CO1sTK_W.mjs";
|
|
3
|
-
import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-
|
|
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-
|
|
2
|
+
import { $ as PreviewRichTextEditor, $a as previewStageSchema, $c as rgbColorValue, $d as Copy, $l as createCollapsibleScope, $n as buildEventCalendarListingRender, $r as ctaCopyFragment, $s as MailIcon, $t as deleteEntrySlotBlock, $u as formatCurrencyAmount, Aa as normalizeOfferingsPreviewGroupOrder, Ac as isRotationDimensionSwap, Ad as Pencil, Ai as getCuratedSiteStyle, Al as Input, An as SITE_CHROME_VISIBLE_HEADER_SELECTOR, Ao as formatDate$3, Ar as formatCommercePrice, As as resolveIconPickerPreset, At as createRoutingHelpers, Au as clsx, Ba as eventPageSizeSchema, Bd as ImageOff, Bi as NAV_LINK_LETTER_SPACING_MAP, Bl as Dialog, Bn as isInternalResolvedLinkValue, Bo as resolveEventCta, Br as augmentManifestWithStyleGroups, Bs as ChevronLeftIcon, Bt as ManifestForm, Bu as formatBookingTime, Cc as resolveImageUrlWithContext, Cd as Sparkles, Ci as retargetCompiledBoundaryRuntimeForContentAdjacency, Cl as SelectTrigger, Cn as isSupportedLoaderEndpoint, Co as resolveOnColorForThemeToken, Cr as buildProductDetailInteractiveIslandProps, Cs as getGeneratedBlockIconStyleState, Ct as pushHistoryEntry, Cu as createContextScope, Da as buildOfferingsPreviewRenderStates, Dc as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Dd as RotateCcw, Di as resolveVisiblePromotedFieldPathsForEditorBlock, Dl as Popover, Dn as listBlockDescriptors, Do as buildGoogleMapsDirectionsUrl, Dr as buildCartDisplay, Ds as parseGeneratedIconSetId, Dt as recordsEqual, Du as cva, Ea as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Ec as setContextResolveImageUrlContext, Ed as Search, Ei as planPageDesignLayoutLookCompatibility, El as Badge, En as getBlockDefinition, Eo as featuresFromHex, Er as getShopDisplayForItems, Es as parseGeneratedIconAssetId, Et as unsafeAsLinkedContentEntryId, Eu as Button, Fa as resolveOfferingsPreviewGroups, Fc as asRecord, Fi as getComponentBorderWidthPx, Fl as Content$1, Fn as mediaTransforms, Fo as formatEventTeacherLine, Fr as deriveCommerceCheckoutState, Fs as ArrowLeftIcon, Ft as PaletteProvider, Fu as unsafeAsEditorBlockValues, G as beginAutosaveBatch, Ga as normalizeCsvString, Gc as generateBaseInteractiveCSS, Gd as FilePlay, Gi as INPUT_FONT_SIZE_MAP, Gl as DialogHeader, Gn as productDetailBlockDefinition, Go as resolveRuntimeEventPricing, Gr as faqHeadingFragment, Gs as ClockIcon$1, Gt as createStoreBackend, Gu as toBookingTimeZone, Ha as resolveEventCalendarListPageSize, Hc as generateButtonCss, Hd as File, Hi as NAV_LINK_PADDING_X_MAP, Hl as DialogContent, Hn as useImageResolveContextOptional, Ho as getEventAvailability, Hr as headingFragment, Hs as ChevronUpIcon, Hu as getBookingLocalDateKey, Ia as isSemanticSpacing, Ic as getDirectImageUrlForMediaAsset, Id as LoaderCircle, Ii as getComponentShadowVar, Il as List, In as layoutTransforms, Io as formatTime$3, Ir as parseStoredCommerceCartState, Is as ArrowRightIcon, It as usePalette, Iu as addLocalScheduleDays, J as enqueueTransaction, Ja as columnOptionSchema, Jc as parseThemeButtonVariantId, Jl as CollapsibleContent, Jn as eventListingBlockDefinition, Jo as createInteractiveIslandCodec, Jr as footerBottomTextFragment, Js as FileArchiveIcon, Jt as applyPageDesignEditorAction, Ju as publicEventPricingCurrency, K as confirmAutosaveBatch, Ka as normalizeOptionalId, Kc as generateInteractiveChildInheritanceCSS, Kd as FileHeadphone, Ki as INPUT_SPACING_MAP, Kl as DialogTitle, Kn as newsletterSignupBlockDefinition, Ko as blockBookingPaymentTermsSchema, Kr as blogFeaturedPostFragment, Ks as DownloadIcon, Kt as listContentTypes, Ku as toScheduledBookingDateTime, La as resolveSpacing, Lc as getImageUrl, Ld as Image, Li as parseBlockCustomCssRules, Ll as Root2$1, Ln as uiTransforms, Lo as getCardOrientation, Lr as productItemKey, Ls as CalendarIcon$1, Lt as recoveryConflictCopy, Lu as formatBookingDate, Ma as resolveOfferingsPreviewCoursePath, Mc as formatAspectRatioToken, Mi as isThemeV2NormalEditorRawStyleFieldName, Ml as TabsContent, Mn as planSiteOverlayHeaderClearance, Mo as formatEventDateParts, Mr as EMPTY_COMMERCE_CART_STATE, Ms as getSemanticIconComponent, Mu as createEditorRemoveBlockCommand, Na as resolveOfferingsPreviewGroupCta, Nc as parseAspectRatioValue, Ni as isThemeV2NormalEditorRawStylePath, Nl as TabsList, Nn as visibleHeaderClearancePx, No as formatEventPrice, Nr as buildPassCartItem, Ns as isSemanticIconId, Nu as createEditorReorderBlocksCommand, Oa as inferLegacyOfferingsPreviewGroupOrder, Oc as resolveMediaSlotContract, Ol as PopoverContent, On as siteFooterManifest, Oo as normalizeLocationMapProps, Or as buildProductCardDisplay, Os as parseSiteIconStyleGuideVersionId, Ou as useComposedRefs, Pa as resolveOfferingsPreviewGroupOrderEntries, Pc as resolveMediaTransformForAspect, Pd as Minus, Pi as pageDesignEditorBackgroundOverrideOwner, Pl as TabsTrigger, Pn as contentTransforms, Po as formatEventPriceDisplay, Pr as buildProductCartItem, Ps as ArrowDownIcon, Pu as unsafeAsEditorBlockId, Q as resolvePreviewSidebarTab, Qa as filterAutoShowSchema, Qc as mergeStyles, Qd as CreditCard, Ql as Trigger, Qn as buildEventCalendarListingDisplay, Qo as defineProgressiveBlockRuntime, Qr as testimonialsHeadingFragment, Qs as InfoIcon, Qt as deleteBlock, Qu as publicEventTicketTypes, Ra as buildEventRuntimeFilters, Rc as getAtPath, Rd as ImageUp, Ri as parseCustomCssRules, Rl as Trigger$1, Rn as formattingTransforms, Ro as getContainerClass, Rr as reduceCommerceCart, Rs as CheckIcon$1, Rt as unfinishedBlockCopy, Ru as formatBookingDateTime, Sa as ctaButton, Sc as renderVideo, Sd as Star, Si as compileEditorModelRuntime, Sl as SelectItem, Sn as useUniqueId, So as isCssColorLiteral, Sr as buildCheckoutInteractiveIslandProps, Ss as getBlockIconSemanticId, St as createHistoryState, Su as useControllableState, Tc as resolveMediaStorageUrl, Td as Settings, Ti as normalEditorCuratedPromotedFieldPaths, Tl as Label, Tn as GRADIENT_PRESETS, To as getTextColorForBackground, Tr as buildShopInteractiveIslandProps, Ts as resolveBlockIconRenderValue, Tt as undoHistory, Tu as Primitive, Ua as resolveEventListPaginationAction, Uc as generateEffectsCSS, Ud as FileText, Ui as NAV_LINK_TEXT_SIZE_MAP, Ul as DialogDescription, Un as shopBlockDefinition, Uo as getLocalDateKey, Ur as cardFragment, Us as CircleMinusIcon, Ut as FormRenderer, Uu as parseBookingLocalDate, Va as getEventRuntimeFiltersKey, Vd as GripVertical, Vi as NAV_LINK_PADDING_MAP, Vl as DialogClose, Vn as ImageResolveContextProvider, Vo as resolveEventLinkProps, Vr as richTextFragment, Vs as ChevronRightIcon, Vt as createManifestFormAdapter, Vu as formatLocalScheduleDate, Wa as normalizeCsvIds, Wc as generateShadowValue$1, Wd as FileSpreadsheet, Wi as FONT_WEIGHT_MAP, Wl as DialogFooter, Wn as productListBlockDefinition, Wo as getLocalMinuteOfDay, Wr as faqAccordionFragment, Ws as CirclePlusIcon, Wt as evaluateVisibility, Wu as resolveBookingTimeZoneId, X as rejectAutosaveBatch, Xa as eventCalendarDefaultViewSchema, Xc as backgroundColorStyle, Xd as EllipsisVertical, Xl as Content, Xn as eventCalendarBlockDefinition, Xo as createZodCodec, Xr as formCopyFragment, Xs as FileSpreadsheetIcon, Xt as createBlock, Xu as publicEventPricingType, Y as idleEditorTransactionQueueState, Ya as eventButtonVariantSchema, Yc as themeButtonClassName, Yd as EyeOff, Yn as buildEventListingInteractiveIslandProps, Yo as defineInteractiveIslandMetaKeys, Yr as formEmbedFragment, Ys as FileAudioIcon, Yt as getPageDesignEditorState, Yu as publicEventPricingMode, Za as eventLayoutSchema, Zc as borderColorStyle, Zd as Crop, Zl as Root, Zn as buildEventCalendarInteractiveIslandProps, Zo as defineClientOwnedBlockRuntime, Zr as testimonialsCarouselFragment, Zs as FileTextIcon, Zt as createEntrySlotBlock, Zu as publicEventScalarPrice, _c as MediaPlaceholder, _f as __toESM, _i as mergeHeaderNavTypographyPreference, _l as TooltipProvider, _n as useSensors, _o as generateCardCss, _r as courseRegistrationBlockDefinition, _s as resolveFeatureCardGeneratedIconSizePx, _t as useEditorUiStore, _u as __spreadArray, aa as sectionTransitionFamilyForBoundaryOptionId, ac as ShoppingCartIcon, ad as unsafeAsAppointmentServiceId, af as ChevronsUpDown, ai as PUBLIC_FILE_FIELD_KINDS, al as isNonEmptyValue, an as DEFAULT_LAUNCH_READINESS_INPUT, ao as bindingSchema, ar as findEventByOccurrenceId, as as assertNever$6, at as getRichTextImagePositionFromTarget, au as DropdownMenu, ba as createTransformRegistry, bc as getCurrentResolveImageUrlContext, bd as Ticket, bi as PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, bl as Select, bn as useCombinedRefs, bo as normalizeBoxStylesCardVariant, br as cartBlockDefinition, bs as toFeatureCardIconSuggestionInputs, bt as canRedoHistory, bu as useDirection, ca as backgroundAppearanceColorTokenNames, cc as createRichTextDocFromMarkdown, cd as unsafeAsMediaAssetId, cf as ChevronLeft, ci as MQ_MD_DOWN, cl as useSdkConfig, cn as DndContext, co as eventSurfaceScopeValues, cr as resolveEventRequiresPayment, cs as ACCORDION_TRIGGER_FONT_SCALE, ct as EditorProvider, da as parseBackgroundAppearanceColorToken, dc as isRecord$20, dd as unsafeAsPositiveSeconds, df as Box, di as MQ_TABLET_ONLY, dl as mapOptionValueForSelect, dn as closestCenter, do as normalizeEventScheduleScope, dr as getStepNumber$1, ds as ICON_SIZE_PX, dt as useUISelector, du as __assign, ec as MapPinIcon$1, ed as assertNever$5, ef as Clock3, ei as heroCtaRowFragment, el as textColorStyle, eo as weekStartSchema, er as formBlockDefinition, es as composeHeaderSectionWrapperClassName, et as PreviewInlineTextEditor, eu as Card, fa as defaultThemeTokens, fc as coerceInlineTextWithFallback, fd as err$2, ff as ArrowUp, fi as BACKGROUND_POSITION_PRESET_VALUES, fl as unmapValueFromSelect, fn as getClientRect, fo as normalizeEventStaffMemberId, fr as getWizardStepsForContext$1, fs as PUBLIC_DOWNLOAD_MEDIA_TYPES, ft as EditableBlockProvider, fu as __awaiter, g as PreviewDesignCoordinatorProvider, gc as ImagePresets, gd as Upload, gf as __exportAll, gi as resolveBackgroundColorValue, gl as TooltipContent, gn as useSensor, go as publicEventSchema, gr as buildGiftingInteractiveIslandProps, gs as getFeatureCardIconCompletion, gu as __rest, hc as parseInlineTextFromUnknown, hd as X, hf as __commonJSMin, hi as resolveSectionForegroundStyles, hl as Tooltip, hn as useDroppable, ho as normalizeEventVenueId, hr as giftingBlockDefinition, hs as createFeatureCardIconKey, ht as useEntryEditorController, hu as __read, i as usePreviewDesignHistoryOrder, ia as sectionTransitionFamilies, ic as PlusIcon, id as unsafeAsAppointmentResourceId, if as CircleAlert, ii as defineFragment, il as isHeaderField, in as decodePublicProductCategorySelectorQuery, io as when, ir as toRegistrationEvents, is as asDesignBlockId, it as RichTextEditorSurface, ja as normalizeOfferingsPreviewItemLimit, jc as normalizeRightAngle, ji as surfaceResolutionContextFromTheme, jl as Tabs, jn as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, jo as formatEventCompactDateRail, jr as formatInterval, js as SEMANTIC_ICON_DEFINITIONS, jt as createSnapshotFromPageRecord, ju as createEditorInsertBlockCommand, ka as isOfferingsPreviewSourceKey, kc as attachRenderableMediaAssetFields, kd as Plus, ki as designRuntimeRulesForTheme, kl as PopoverTrigger, kn as siteHeaderManifest, ko as toLocationMapHydrationProps, kr as buildProductDetailDisplay, ks as isIconPickerPreset, kt as useDebouncedLatestSave, ku as cn$1, la as backgroundAppearanceQuickColorTokenNames, lc as unwrapRichTextRoot, ld as unsafeAsPassId, lf as ChevronDown, li as MQ_SM_DOWN, ll as hasEmptyOption, ln as KeyboardCode, lo as normalizeEventBlockKind, lr as resolveRegistrationTarget, ls as ACCORDION_TRIGGER_LETTER_SPACING, lt as useEditor, lu as DropdownMenuSeparator, mc as isInlineTextEmpty, md as lucide_react_exports, mf as Archive, mi as boxStylesTransforms, ml as useField, mn as useDraggable, mo as normalizeEventSurfaceScope, mr as resolveEventRegistrationScopedEvents, ms as FEATURE_CARD_ICON_TREATMENTS, mu as __generator, n as useSiteChromeCustomizeOptional, na as boundaryRuntimeMetricsForTransition, nc as PhoneIcon, nd as parseMediaAssetId, nf as CircleMinus, ni as heroCopyFragment, nl as getFieldIntent, nn as reorderBlocks, no as eventCalendarListLayoutOptions, nr as eventRegistrationBlockDefinition, ns as splitPositioningClasses, nt as useRichTextEditor, nu as CardHeader, oa as sectionTransitionVariantForBoundaryOptionId, oc as UploadIcon, od as unsafeAsCustomerPassId, of as ChevronUp, oi as siteOptionSources, ol as useBlockContext, on as deriveLaunchReadiness, oo as eventBlockKindValues, or as findPreSelectedEvent, os as ACCORDION_OPEN_ACCENT_THICKNESS, ot as insertOrReplaceRichTextImage, ou as DropdownMenuContent, pc as inlineTextToPlainText, pd as ok$3, pf as ArrowDown, pi as getAnchorClasses, pl as FieldFrame, pn as useDndContext, po as normalizeEventSurfacePresetsCsv, pr as normalizeEventRegistrationPageSurfaceSubject, ps as mediaSchema, pt as EntryControllerProvider, pu as __extends, q as deriveTransactionCapabilities, qa as calendarTabViewsSchema, qc as TokenResolver, qd as FileArchive, qi as LABEL_FONT_SIZE_MAP, ql as Collapsible, qn as buildNewsletterFormInteractiveIslandProps, qo as buildInteractiveIslandProps, qr as singleButtonFragment, qs as ExternalLinkIcon, qt as toRoutableLinkPayload, qu as formatBookingPriceDisplay, r as PreviewDesignHistoryOrderProvider, ra as defaultSectionTransitionVariantForFamily, rc as PlayIcon, rd as parseSiteId, rf as CircleCheck, ri as bodyCopyFragment, rl as getModalConfig, rn as reorderEntrySlotBlocks, ro as el, rr as buildEventRegistrationInteractiveIslandProps, rs as planSiteChromePlacement, rt as EMPTY_DOC, ru as CardTitle, sa as BACKGROUND_BODY_TEXT_MIN_CONTRAST_RATIO, sc as XIcon, sd as unsafeAsFormId, sf as ChevronRight, si as MQ_LG_UP, sl as SdkConfigProvider, sn as AMBIENT_BACKGROUND_ROLES$1, so as eventScheduleScopeValues, sr as resolveDiscountContext, ss as ACCORDION_SPACING_MAP, st as InlineTextEditor, su as DropdownMenuItem, t as SiteChromeCustomizeProvider, tc as MinusIcon, td as expectParsedBrandedId, tf as CirclePlus, ti as ctaRowFragment, tl as useBackendWatch, tn as mutateBlockContent, to as eventCalendarListLayoutCompatibleDisplayModeValues, tr as buildFormInteractiveIslandProps, ts as markEditableSurfaceForwarding, tt as PreviewTextEditor, tu as CardContent, ua as foregroundTokenForBackgroundAppearanceColorToken, uc as isObjectRecord, ud as unsafeAsPositiveByteCount$1, uf as Check, ui as MQ_SM_UP, ul as mapCurrentValueForSelect, un as PointerSensor, uo as normalizeEventCategoryIdsCsv, ur as WIZARD_STEPS$1, us as ICON_CONFIG, uu as DropdownMenuTrigger, v as PreviewThemeOverlayProvider, va as expandPalette, vc as buildResolveImageUrlContext, vi as readHeaderNavFontSizePreference, vl as TooltipTrigger, vn as CSS, vo as statusMutedColorDeclaration, vr as buildCourseRegistrationInteractiveIslandProps, vs as shouldReserveFeatureCardIconZone, vt as useEditorUiStoreInstance, vu as __spreadArrays, wc as resolveMediaNodeResponsiveImage, wi as retargetCompiledRuntimeFieldsForContentAdjacency, wl as SelectValue, wn as gradientToCss, wo as resolveTokenOrCssColorValue, wr as buildProductListInteractiveIslandProps, ws as parseBlockIconValue, wt as redoHistory, wu as composeEventHandlers, xa as runTransforms, xc as renderAudio, xi as applyCompiledRuntimeFieldsToContent, xl as SelectContent, xn as useIsomorphicLayoutEffect, xo as normalizeCardVariantRole, xr as buildCartInteractiveIslandProps, xs as buildGeneratedBlockIconRenderAssetLookupFromUnknown, xt as canUndoHistory, xu as createCollection, y as usePreviewThemeOverlay, ya as generateCssVars, yc as computeMediaTransformStyle, yd as Trash2, yi as formatSiteChromeBackgroundTokenLabel, yl as Textarea, yn as isKeyboardEvent, yo as generateShadowValue, yr as checkoutBlockDefinition, ys as suggestSemanticIconForFeatureCard, yt as useOptionalEditorUiStoreInstance, yu as useId$1, za as eventListPaginationActionSchema, zc as siblingPath$1, zd as ImagePlus, zi as NAV_LINK_BORDER_RADIUS_MAP, zl as ScrollableDialogContent, zn as createManifestValidator, zo as groupEventsByDate, zr as augmentManifest, zs as ChevronDownIcon, zt as validateBlockManifestIssues, zu as formatBookingInstant } from "./SiteChromeCustomizeContext-Bt8zb3qu.mjs";
|
|
3
|
+
import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-CStABBUh.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-CfquDtTh.mjs";
|
|
5
5
|
import * as React$1 from "react";
|
|
6
6
|
import React, { Children, Component, Fragment, cloneElement, createContext, createElement, createRef, forwardRef, isValidElement, memo, startTransition, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
|
|
7
7
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1280,7 +1280,7 @@ var BlockApiError = class extends Error {
|
|
|
1280
1280
|
this.name = "BlockApiError";
|
|
1281
1281
|
}
|
|
1282
1282
|
};
|
|
1283
|
-
function isRecord$
|
|
1283
|
+
function isRecord$19(value) {
|
|
1284
1284
|
return typeof value === "object" && value !== null;
|
|
1285
1285
|
}
|
|
1286
1286
|
function isJsonResponseContentType(contentType) {
|
|
@@ -1304,8 +1304,8 @@ async function parseJsonBody(response) {
|
|
|
1304
1304
|
}
|
|
1305
1305
|
}
|
|
1306
1306
|
function getBlockApiErrorDetails(data) {
|
|
1307
|
-
if (!isRecord$
|
|
1308
|
-
const nestedError = isRecord$
|
|
1307
|
+
if (!isRecord$19(data)) return {};
|
|
1308
|
+
const nestedError = isRecord$19(data.error) ? data.error : void 0;
|
|
1309
1309
|
return {
|
|
1310
1310
|
message: typeof nestedError?.message === "string" ? nestedError.message : typeof data.message === "string" ? data.message : void 0,
|
|
1311
1311
|
code: typeof nestedError?.code === "string" ? nestedError.code : typeof data.code === "string" ? data.code : void 0
|
|
@@ -2517,7 +2517,7 @@ function Text$1({ as: Comp = "span", children, className = "", path, maxLength:
|
|
|
2517
2517
|
function coerceRichTextDoc(value) {
|
|
2518
2518
|
const raw = unwrapRichTextRoot(value);
|
|
2519
2519
|
if (typeof raw === "string") return createRichTextDocFromMarkdown(raw);
|
|
2520
|
-
if (isRecord$
|
|
2520
|
+
if (isRecord$20(raw) && typeof raw.type === "string") return raw;
|
|
2521
2521
|
return null;
|
|
2522
2522
|
}
|
|
2523
2523
|
//#endregion
|
|
@@ -2735,7 +2735,8 @@ function getIconComponent(name) {
|
|
|
2735
2735
|
//#endregion
|
|
2736
2736
|
//#region ../blocks/src/system/runtime/nodes/icon.tsx
|
|
2737
2737
|
const IconNode = ({ value, title, className, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {
|
|
2738
|
-
const
|
|
2738
|
+
const parsedValue = parseBlockIconValue(value);
|
|
2739
|
+
const Icon = getIconComponent(parsedValue.kind === "generated" ? null : parsedValue.kind === "semantic" ? parsedValue.iconId : value);
|
|
2739
2740
|
if (!Icon) return null;
|
|
2740
2741
|
const decorative = !rest["aria-label"] && !title;
|
|
2741
2742
|
return /* @__PURE__ */ jsx(Icon, {
|
|
@@ -2746,6 +2747,70 @@ const IconNode = ({ value, title, className, blockId: _blockId, blockKind: _bloc
|
|
|
2746
2747
|
});
|
|
2747
2748
|
};
|
|
2748
2749
|
//#endregion
|
|
2750
|
+
//#region ../blocks/src/system/icons/generatedAssets.ts
|
|
2751
|
+
function isRecord$18(value) {
|
|
2752
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2753
|
+
}
|
|
2754
|
+
function generatedIconAssetRefKey(ref) {
|
|
2755
|
+
return `${ref.setId}\u0000${ref.assetId}`;
|
|
2756
|
+
}
|
|
2757
|
+
function collectGeneratedIconAssetRefs(page) {
|
|
2758
|
+
const blocks = [];
|
|
2759
|
+
for (const block of page.blocks) {
|
|
2760
|
+
if (block.kind !== "block.feature-cards" || typeof block.id !== "string") continue;
|
|
2761
|
+
const content = isRecord$18(block.draftContent) ? block.draftContent : isRecord$18(block.content) ? block.content : null;
|
|
2762
|
+
const cards = Array.isArray(content?.cards) ? content.cards : [];
|
|
2763
|
+
const refs = /* @__PURE__ */ new Map();
|
|
2764
|
+
for (const card of cards) {
|
|
2765
|
+
if (!isRecord$18(card)) continue;
|
|
2766
|
+
const icon = parseBlockIconValue(card.icon);
|
|
2767
|
+
if (icon.kind !== "generated") continue;
|
|
2768
|
+
const ref = {
|
|
2769
|
+
setId: icon.setId,
|
|
2770
|
+
assetId: icon.assetId
|
|
2771
|
+
};
|
|
2772
|
+
refs.set(generatedIconAssetRefKey(ref), ref);
|
|
2773
|
+
}
|
|
2774
|
+
if (refs.size > 0) blocks.push({
|
|
2775
|
+
blockId: block.id,
|
|
2776
|
+
refs: [...refs.values()]
|
|
2777
|
+
});
|
|
2778
|
+
}
|
|
2779
|
+
return blocks;
|
|
2780
|
+
}
|
|
2781
|
+
function dedupeGeneratedIconAssetRefs(blocks) {
|
|
2782
|
+
return [...new Map(blocks.flatMap((block) => block.refs).map((ref) => [generatedIconAssetRefKey(ref), ref])).values()];
|
|
2783
|
+
}
|
|
2784
|
+
function mapGeneratedIconAssetsToBlocks(blocks, resolvedAssets) {
|
|
2785
|
+
const byKey = new Map(resolvedAssets.map((asset) => [generatedIconAssetRefKey(asset), asset]));
|
|
2786
|
+
return Object.fromEntries(blocks.flatMap((block) => {
|
|
2787
|
+
const assets = block.refs.flatMap((ref) => {
|
|
2788
|
+
const asset = byKey.get(generatedIconAssetRefKey(ref));
|
|
2789
|
+
if (!asset) return [];
|
|
2790
|
+
const setId = parseGeneratedIconSetId(asset.setId);
|
|
2791
|
+
const assetId = parseGeneratedIconAssetId(asset.assetId);
|
|
2792
|
+
if (!setId || !assetId) return [];
|
|
2793
|
+
return [{
|
|
2794
|
+
setId,
|
|
2795
|
+
assetId,
|
|
2796
|
+
src: asset.src,
|
|
2797
|
+
...asset.width === void 0 ? {} : { width: asset.width },
|
|
2798
|
+
...asset.height === void 0 ? {} : { height: asset.height }
|
|
2799
|
+
}];
|
|
2800
|
+
});
|
|
2801
|
+
return assets.length > 0 ? [[block.blockId, assets]] : [];
|
|
2802
|
+
}));
|
|
2803
|
+
}
|
|
2804
|
+
function mergeGeneratedIconAssetsIntoResolvedData(resolvedData, assetsByBlock) {
|
|
2805
|
+
if (Object.keys(assetsByBlock).length === 0) return resolvedData;
|
|
2806
|
+
const merged = { ...resolvedData };
|
|
2807
|
+
for (const [blockId, generatedIconAssets] of Object.entries(assetsByBlock)) merged[blockId] = {
|
|
2808
|
+
...merged[blockId] ?? {},
|
|
2809
|
+
generatedIconAssets
|
|
2810
|
+
};
|
|
2811
|
+
return merged;
|
|
2812
|
+
}
|
|
2813
|
+
//#endregion
|
|
2749
2814
|
//#region ../blocks/src/system/runtime/nodes/feature-card-icon.tsx
|
|
2750
2815
|
function joinClasses$3(...values) {
|
|
2751
2816
|
return values.filter(Boolean).join(" ") || void 0;
|
|
@@ -2757,14 +2822,19 @@ function buildRenderAssetLookupFromUnknown(value) {
|
|
|
2757
2822
|
const result = buildGeneratedBlockIconRenderAssetLookupFromUnknown(value);
|
|
2758
2823
|
return result.kind === "ok" ? result.lookup : /* @__PURE__ */ new Map();
|
|
2759
2824
|
}
|
|
2760
|
-
|
|
2825
|
+
function generatedIconZoneStyle(value) {
|
|
2826
|
+
return { "--rb-feature-card-generated-icon-size": `${resolveFeatureCardGeneratedIconSizePx(value)}px` };
|
|
2827
|
+
}
|
|
2828
|
+
const FeatureCardIconNode = ({ value, treatment, generatedIconSizePx, className, generatedAssets, blockContent }) => {
|
|
2761
2829
|
if (!shouldReserveFeatureCardIconZone(blockContent?.cards)) return null;
|
|
2762
2830
|
const resolvedIcon = resolveBlockIconRenderValue(value, buildRenderAssetLookupFromUnknown(generatedAssets));
|
|
2763
|
-
const iconId = resolvedIcon.kind === "semantic" ? resolvedIcon.iconId :
|
|
2831
|
+
const iconId = resolvedIcon.kind === "semantic" ? resolvedIcon.iconId : null;
|
|
2764
2832
|
const resolvedTreatment = resolveTreatment(treatment);
|
|
2765
|
-
const hasIcon = resolvedIcon.kind
|
|
2833
|
+
const hasIcon = resolvedIcon.kind === "semantic" || resolvedIcon.kind === "generated_asset";
|
|
2834
|
+
const hasGeneratedAsset = resolvedIcon.kind === "generated_asset";
|
|
2766
2835
|
return /* @__PURE__ */ jsx("div", {
|
|
2767
|
-
className: joinClasses$3("rb-feature-card-icon-zone", `rb-feature-card-icon-zone--${resolvedTreatment}`, hasIcon ? "rb-feature-card-icon-zone--filled" : "rb-feature-card-icon-zone--empty", className),
|
|
2836
|
+
className: joinClasses$3("rb-feature-card-icon-zone", `rb-feature-card-icon-zone--${resolvedTreatment}`, hasGeneratedAsset && "rb-feature-card-icon-zone--generated", hasIcon ? "rb-feature-card-icon-zone--filled" : "rb-feature-card-icon-zone--empty", className),
|
|
2837
|
+
style: hasGeneratedAsset ? generatedIconZoneStyle(generatedIconSizePx) : void 0,
|
|
2768
2838
|
"aria-hidden": "true",
|
|
2769
2839
|
children: resolvedIcon.kind === "generated_asset" ? /* @__PURE__ */ jsx("img", {
|
|
2770
2840
|
src: resolvedIcon.asset.src,
|
|
@@ -19249,7 +19319,7 @@ const LEAFLET_JS_INTEGRITY = "sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo
|
|
|
19249
19319
|
let leafletLoaded = false;
|
|
19250
19320
|
let leafletLoadPromise = null;
|
|
19251
19321
|
function isLeafletApi(value) {
|
|
19252
|
-
if (!isRecord$
|
|
19322
|
+
if (!isRecord$20(value)) return false;
|
|
19253
19323
|
return typeof value.map === "function" && typeof value.tileLayer === "function" && typeof value.marker === "function";
|
|
19254
19324
|
}
|
|
19255
19325
|
function loadLeaflet() {
|
|
@@ -30288,7 +30358,7 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
|
|
|
30288
30358
|
function generateNavLinkStyles(header, themeId, tokens, theme, contrastTreatment, navTextSize) {
|
|
30289
30359
|
const navPreferences = {
|
|
30290
30360
|
typography: header.navTypography ?? "inherit",
|
|
30291
|
-
fontSize: header.navTextSize
|
|
30361
|
+
fontSize: readHeaderNavFontSizePreference(header.navTextSize)
|
|
30292
30362
|
};
|
|
30293
30363
|
if (header.navLinkStyle) return generateNavLinkCSS({
|
|
30294
30364
|
themeId,
|
|
@@ -32872,7 +32942,7 @@ function hydrateValue(value, context) {
|
|
|
32872
32942
|
const resolvedItems = value.map((item) => hydrateValue(item, context));
|
|
32873
32943
|
return resolvedItems.every((item, index) => item === value[index]) ? value : resolvedItems;
|
|
32874
32944
|
}
|
|
32875
|
-
if (isRecord$
|
|
32945
|
+
if (isRecord$20(value)) {
|
|
32876
32946
|
if (isInternalLink(value)) return hydrateInternalLink(value, context.routes);
|
|
32877
32947
|
if (isPageLink(value)) return hydratePageLink(value, context);
|
|
32878
32948
|
if (isEntryLink(value)) return hydrateEntryLink(value, context);
|
|
@@ -33535,12 +33605,10 @@ function shouldDebugCustomBlocks() {
|
|
|
33535
33605
|
}
|
|
33536
33606
|
}
|
|
33537
33607
|
function resolveBlockData({ block, definition, dataContext }) {
|
|
33538
|
-
if (!definition.dataLoaders || Object.keys(definition.dataLoaders).length === 0) return;
|
|
33539
33608
|
const blockId = block.id ?? null;
|
|
33540
|
-
|
|
33541
|
-
|
|
33542
|
-
|
|
33543
|
-
return { ...raw };
|
|
33609
|
+
const raw = blockId ? dataContext?.resolvedData?.[blockId] : void 0;
|
|
33610
|
+
if (isObjectRecord(raw)) return { ...raw };
|
|
33611
|
+
return definition.dataLoaders && Object.keys(definition.dataLoaders).length > 0 ? {} : void 0;
|
|
33544
33612
|
}
|
|
33545
33613
|
/**
|
|
33546
33614
|
* Resolves block content based on stage priority.
|
|
@@ -44386,11 +44454,31 @@ const containerResponsiveThemeCss = `/*
|
|
|
44386
44454
|
object-fit: contain;
|
|
44387
44455
|
}
|
|
44388
44456
|
|
|
44457
|
+
:where(.theme-scope) .rb-feature-card-icon-zone--generated {
|
|
44458
|
+
align-self: center;
|
|
44459
|
+
inline-size: min(var(--rb-feature-card-generated-icon-size, 75px), 100%);
|
|
44460
|
+
max-inline-size: 100%;
|
|
44461
|
+
block-size: auto;
|
|
44462
|
+
aspect-ratio: 1;
|
|
44463
|
+
margin-inline: auto;
|
|
44464
|
+
padding: 0;
|
|
44465
|
+
border: 0;
|
|
44466
|
+
border-radius: 0;
|
|
44467
|
+
background: transparent;
|
|
44468
|
+
box-shadow: none;
|
|
44469
|
+
}
|
|
44470
|
+
|
|
44389
44471
|
:where(.theme-scope) .rb-feature-card-icon-zone--plain .rb-feature-card-icon {
|
|
44390
44472
|
width: 1.5rem;
|
|
44391
44473
|
height: 1.5rem;
|
|
44392
44474
|
}
|
|
44393
44475
|
|
|
44476
|
+
:where(.theme-scope) .rb-feature-card-icon-zone--generated .rb-feature-card-icon--generated {
|
|
44477
|
+
inline-size: 100%;
|
|
44478
|
+
max-inline-size: 100%;
|
|
44479
|
+
block-size: 100%;
|
|
44480
|
+
}
|
|
44481
|
+
|
|
44394
44482
|
/* --- Card marker mode (icons / numbers / none) -----------------------------
|
|
44395
44483
|
*
|
|
44396
44484
|
* The icon zone and the number zone both sit in the DOM; the grid's
|
|
@@ -56288,6 +56376,18 @@ function blockSaveabilityEqual(left, right) {
|
|
|
56288
56376
|
}
|
|
56289
56377
|
//#endregion
|
|
56290
56378
|
//#region ../editor-blocks/src/block-editor/featureCardIconActions.ts
|
|
56379
|
+
function planGeneratedIconSetCompatibility(input) {
|
|
56380
|
+
if (input.unavailableAssetIds.length > 0) return {
|
|
56381
|
+
kind: "set_incomplete",
|
|
56382
|
+
unavailableAssetIds: input.unavailableAssetIds
|
|
56383
|
+
};
|
|
56384
|
+
if (!input.sourceCards || input.sourceFingerprintVersion !== 1) return { kind: "source_metadata_unavailable" };
|
|
56385
|
+
if (input.sourceCards.length !== input.currentCards.length || input.sourceCards.some((card, index) => card.cardKey !== input.currentCards[index]?.cardKey)) return { kind: "structural_mismatch" };
|
|
56386
|
+
return input.sourceCards.every((card, index) => {
|
|
56387
|
+
const current = input.currentCards[index];
|
|
56388
|
+
return current && card.title === current.title && card.bodyText === current.bodyText && card.semanticIconId === current.semanticIconId;
|
|
56389
|
+
}) ? { kind: "exact_match" } : { kind: "key_match_content_changed" };
|
|
56390
|
+
}
|
|
56291
56391
|
function getFeatureCards(content) {
|
|
56292
56392
|
const cards = content?.cards;
|
|
56293
56393
|
return Array.isArray(cards) ? cards : [];
|
|
@@ -56297,12 +56397,12 @@ function getFeatureCardIconStatus(content) {
|
|
|
56297
56397
|
}
|
|
56298
56398
|
function getFeatureCardIconDialogCards(content) {
|
|
56299
56399
|
return toFeatureCardIconSuggestionInputs(getFeatureCards(content)).map((card, index) => {
|
|
56300
|
-
const
|
|
56400
|
+
const semanticIconId = getBlockIconSemanticId(card.icon) ?? suggestSemanticIconForFeatureCard(card);
|
|
56301
56401
|
return {
|
|
56302
56402
|
cardKey: card.key,
|
|
56303
56403
|
title: card.title.trim().length > 0 ? card.title.trim() : `Card ${index + 1}`,
|
|
56304
56404
|
bodyText: card.bodyText.slice(0, 160),
|
|
56305
|
-
semanticIconId
|
|
56405
|
+
semanticIconId
|
|
56306
56406
|
};
|
|
56307
56407
|
});
|
|
56308
56408
|
}
|
|
@@ -56335,41 +56435,6 @@ function getFeatureCardGeneratedIconStyleSummary(content, currentStyleGuideVersi
|
|
|
56335
56435
|
invalidGeneratedCount
|
|
56336
56436
|
};
|
|
56337
56437
|
}
|
|
56338
|
-
function applyCuratedFeatureCardIconSuggestions({ blockId, content, drafts }) {
|
|
56339
|
-
const cards = getFeatureCards(content);
|
|
56340
|
-
if (cards.length === 0) return { kind: "no_cards" };
|
|
56341
|
-
const suggestions = suggestFeatureCardSemanticIcons(cards);
|
|
56342
|
-
if (suggestions.length === 0) return { kind: "complete" };
|
|
56343
|
-
const plan = applyFeatureCardIconSuggestions(cards, suggestions);
|
|
56344
|
-
switch (plan.kind) {
|
|
56345
|
-
case "applied": break;
|
|
56346
|
-
case "duplicate_card_key":
|
|
56347
|
-
case "duplicate_suggestion_card_key":
|
|
56348
|
-
case "missing_suggestion_card_key":
|
|
56349
|
-
case "unknown_card_key": return {
|
|
56350
|
-
kind: "plan_failed",
|
|
56351
|
-
reason: plan.kind,
|
|
56352
|
-
cardKey: plan.cardKey
|
|
56353
|
-
};
|
|
56354
|
-
case "invalid_semantic_icon": return {
|
|
56355
|
-
kind: "plan_failed",
|
|
56356
|
-
reason: plan.kind,
|
|
56357
|
-
iconId: plan.iconId
|
|
56358
|
-
};
|
|
56359
|
-
default: assertNever$5(plan);
|
|
56360
|
-
}
|
|
56361
|
-
for (const suggestion of plan.appliedSuggestions) {
|
|
56362
|
-
const cardIndex = cards.findIndex((card, index) => createFeatureCardIconKey(card, index) === suggestion.cardKey);
|
|
56363
|
-
if (cardIndex >= 0) drafts.setAtPath(blockId, `cards.${cardIndex}.icon`, {
|
|
56364
|
-
kind: "semantic",
|
|
56365
|
-
iconId: suggestion.iconId
|
|
56366
|
-
});
|
|
56367
|
-
}
|
|
56368
|
-
return {
|
|
56369
|
-
kind: "applied",
|
|
56370
|
-
appliedCount: plan.appliedSuggestions.length
|
|
56371
|
-
};
|
|
56372
|
-
}
|
|
56373
56438
|
function planGeneratedFeatureCardIconSetApply(cards, assets) {
|
|
56374
56439
|
const cardKeys = cards.map(createFeatureCardIconKey);
|
|
56375
56440
|
const cardKeySet = new Set(cardKeys);
|
|
@@ -56431,7 +56496,33 @@ function applyGeneratedFeatureCardIconSet({ blockId, content, drafts, assets })
|
|
|
56431
56496
|
};
|
|
56432
56497
|
}
|
|
56433
56498
|
//#endregion
|
|
56499
|
+
//#region ../editor-blocks/src/widgets/icon-picker/GeneratedIconLibraryContext.tsx
|
|
56500
|
+
const GeneratedIconLibraryContext = createContext({
|
|
56501
|
+
kind: "ready",
|
|
56502
|
+
sets: [],
|
|
56503
|
+
nextCursor: null,
|
|
56504
|
+
loadMore: null
|
|
56505
|
+
});
|
|
56506
|
+
function GeneratedIconLibraryProvider({ value, children }) {
|
|
56507
|
+
return /* @__PURE__ */ jsx(GeneratedIconLibraryContext.Provider, {
|
|
56508
|
+
value,
|
|
56509
|
+
children
|
|
56510
|
+
});
|
|
56511
|
+
}
|
|
56512
|
+
function useGeneratedIconLibrary() {
|
|
56513
|
+
return useContext(GeneratedIconLibraryContext);
|
|
56514
|
+
}
|
|
56515
|
+
//#endregion
|
|
56434
56516
|
//#region ../editor-blocks/src/block-editor/GeneratedIconSetDialog.tsx
|
|
56517
|
+
const GENERATION_FAILURE_MESSAGE = "We could not make those icons this time. Please try again in a moment.";
|
|
56518
|
+
function isTechnicalGenerationMessage(message) {
|
|
56519
|
+
return /\b(provider|request|status|validation|internal server error)\b/iu.test(message);
|
|
56520
|
+
}
|
|
56521
|
+
function friendlyGenerationFailureMessage(message) {
|
|
56522
|
+
const trimmed = message?.trim();
|
|
56523
|
+
if (!trimmed) return GENERATION_FAILURE_MESSAGE;
|
|
56524
|
+
return isTechnicalGenerationMessage(trimmed) ? GENERATION_FAILURE_MESSAGE : trimmed;
|
|
56525
|
+
}
|
|
56435
56526
|
function reducer(state, action) {
|
|
56436
56527
|
switch (action.type) {
|
|
56437
56528
|
case "reset": return { kind: "idle" };
|
|
@@ -56440,6 +56531,11 @@ function reducer(state, action) {
|
|
|
56440
56531
|
kind: "applying",
|
|
56441
56532
|
preview: action.preview
|
|
56442
56533
|
};
|
|
56534
|
+
case "apply_failed": return {
|
|
56535
|
+
kind: "apply_failed",
|
|
56536
|
+
preview: action.preview,
|
|
56537
|
+
message: action.message
|
|
56538
|
+
};
|
|
56443
56539
|
case "preview_ready": return {
|
|
56444
56540
|
kind: "preview_ready",
|
|
56445
56541
|
preview: action.preview
|
|
@@ -56451,27 +56547,27 @@ function reducer(state, action) {
|
|
|
56451
56547
|
}
|
|
56452
56548
|
}
|
|
56453
56549
|
function getGenerationErrorMessage(error) {
|
|
56454
|
-
return error instanceof Error
|
|
56550
|
+
return friendlyGenerationFailureMessage(error instanceof Error ? error.message : null);
|
|
56455
56551
|
}
|
|
56456
56552
|
function validateGeneratedIconSetPreview(preview, cards) {
|
|
56457
56553
|
const cardKeys = new Set(cards.map((card) => card.cardKey));
|
|
56458
56554
|
if (cardKeys.size !== cards.length) return {
|
|
56459
56555
|
kind: "invalid",
|
|
56460
|
-
message: "
|
|
56556
|
+
message: "The icons did not line up with this block. Please try again."
|
|
56461
56557
|
};
|
|
56462
56558
|
const assetKeys = new Set(preview.assets.map((asset) => asset.cardKey));
|
|
56463
56559
|
if (assetKeys.size !== preview.assets.length || assetKeys.size !== cardKeys.size) return {
|
|
56464
56560
|
kind: "invalid",
|
|
56465
|
-
message: "
|
|
56561
|
+
message: "The icons came back incomplete. Please try again."
|
|
56466
56562
|
};
|
|
56467
56563
|
for (const asset of preview.assets) {
|
|
56468
56564
|
if (!cardKeys.has(asset.cardKey)) return {
|
|
56469
56565
|
kind: "invalid",
|
|
56470
|
-
message: "
|
|
56566
|
+
message: "The icons came back incomplete. Please try again."
|
|
56471
56567
|
};
|
|
56472
56568
|
if (parseBlockIconValue(asset.iconValue).kind !== "generated") return {
|
|
56473
56569
|
kind: "invalid",
|
|
56474
|
-
message: "
|
|
56570
|
+
message: "The icons did not line up with this block. Please try again."
|
|
56475
56571
|
};
|
|
56476
56572
|
}
|
|
56477
56573
|
return {
|
|
@@ -56479,12 +56575,43 @@ function validateGeneratedIconSetPreview(preview, cards) {
|
|
|
56479
56575
|
preview
|
|
56480
56576
|
};
|
|
56481
56577
|
}
|
|
56578
|
+
function librarySetToPreview(set, cards) {
|
|
56579
|
+
const assets = set.assets.map((asset) => {
|
|
56580
|
+
const iconValue = parseBlockIconValue(asset.iconValue);
|
|
56581
|
+
if (iconValue.kind !== "generated") return null;
|
|
56582
|
+
const card = cards.find((candidate) => candidate.cardKey === asset.cardKey);
|
|
56583
|
+
return {
|
|
56584
|
+
cardKey: asset.cardKey,
|
|
56585
|
+
title: card?.title ?? asset.subjectLabel,
|
|
56586
|
+
src: asset.renderAsset?.src ?? "",
|
|
56587
|
+
iconValue,
|
|
56588
|
+
renderAsset: asset.renderAsset
|
|
56589
|
+
};
|
|
56590
|
+
});
|
|
56591
|
+
if (assets.some((asset) => asset === null)) return {
|
|
56592
|
+
kind: "invalid",
|
|
56593
|
+
message: "This icon set is no longer available."
|
|
56594
|
+
};
|
|
56595
|
+
return validateGeneratedIconSetPreview({
|
|
56596
|
+
setId: set.setId,
|
|
56597
|
+
styleGuideSummary: set.styleFreshness.kind === "current" ? "Made with your current icon style" : "Made with an older icon style",
|
|
56598
|
+
assets: assets.filter((asset) => asset !== null)
|
|
56599
|
+
}, cards);
|
|
56600
|
+
}
|
|
56601
|
+
function formatGeneratedAt(value) {
|
|
56602
|
+
const date = new Date(value);
|
|
56603
|
+
return Number.isNaN(date.valueOf()) ? "Previously generated" : new Intl.DateTimeFormat(void 0, { dateStyle: "medium" }).format(date);
|
|
56604
|
+
}
|
|
56482
56605
|
function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary, styleGuideEditHref, onGenerate, onApply }) {
|
|
56483
56606
|
const [state, dispatch] = useReducer(reducer, { kind: "idle" });
|
|
56484
56607
|
const [styleNote, setStyleNote] = useState("");
|
|
56608
|
+
const [view, setView] = useState("create");
|
|
56485
56609
|
const activeGenerationRef = useRef(null);
|
|
56486
|
-
const
|
|
56487
|
-
const
|
|
56610
|
+
const library = useGeneratedIconLibrary();
|
|
56611
|
+
const recentSets = library.sets.filter((set) => set.blockKind === "block.feature-cards");
|
|
56612
|
+
const canGenerate = Boolean(onGenerate) && cards.length > 0 && state.kind !== "generating" && state.kind !== "applying";
|
|
56613
|
+
const canApply = Boolean(onApply) && (state.kind === "preview_ready" || state.kind === "apply_failed");
|
|
56614
|
+
const activePreview = state.kind === "preview_ready" || state.kind === "applying" || state.kind === "apply_failed" ? state.preview : null;
|
|
56488
56615
|
function abortActiveGeneration() {
|
|
56489
56616
|
activeGenerationRef.current?.abort();
|
|
56490
56617
|
activeGenerationRef.current = null;
|
|
@@ -56523,7 +56650,7 @@ function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary,
|
|
|
56523
56650
|
}
|
|
56524
56651
|
dispatch({
|
|
56525
56652
|
type: "failed",
|
|
56526
|
-
message: result.message
|
|
56653
|
+
message: friendlyGenerationFailureMessage(result.message)
|
|
56527
56654
|
});
|
|
56528
56655
|
} catch (error) {
|
|
56529
56656
|
if (activeGenerationRef.current !== generation || generation.signal.aborted) return;
|
|
@@ -56538,7 +56665,10 @@ function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary,
|
|
|
56538
56665
|
function close(nextOpen) {
|
|
56539
56666
|
if (!nextOpen) abortActiveGeneration();
|
|
56540
56667
|
onOpenChange(nextOpen);
|
|
56541
|
-
if (!nextOpen)
|
|
56668
|
+
if (!nextOpen) {
|
|
56669
|
+
dispatch({ type: "reset" });
|
|
56670
|
+
setView("create");
|
|
56671
|
+
}
|
|
56542
56672
|
}
|
|
56543
56673
|
async function apply(preview) {
|
|
56544
56674
|
if (!onApply) return;
|
|
@@ -56550,7 +56680,8 @@ function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary,
|
|
|
56550
56680
|
const result = await onApply(preview);
|
|
56551
56681
|
if (result?.kind === "failed") {
|
|
56552
56682
|
dispatch({
|
|
56553
|
-
type: "
|
|
56683
|
+
type: "apply_failed",
|
|
56684
|
+
preview,
|
|
56554
56685
|
message: result.message
|
|
56555
56686
|
});
|
|
56556
56687
|
return;
|
|
@@ -56558,7 +56689,8 @@ function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary,
|
|
|
56558
56689
|
close(false);
|
|
56559
56690
|
} catch (error) {
|
|
56560
56691
|
dispatch({
|
|
56561
|
-
type: "
|
|
56692
|
+
type: "apply_failed",
|
|
56693
|
+
preview,
|
|
56562
56694
|
message: getGenerationErrorMessage(error)
|
|
56563
56695
|
});
|
|
56564
56696
|
}
|
|
@@ -56569,67 +56701,219 @@ function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary,
|
|
|
56569
56701
|
children: /* @__PURE__ */ jsxs(DialogContent, {
|
|
56570
56702
|
className: "sm:max-w-2xl",
|
|
56571
56703
|
children: [
|
|
56572
|
-
/* @__PURE__ */ jsxs(DialogHeader, { children: [/* @__PURE__ */ jsx(DialogTitle, { children: "
|
|
56704
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [/* @__PURE__ */ jsx(DialogTitle, { children: "Choose icon set" }), /* @__PURE__ */ jsx(DialogDescription, { children: activePreview ? activePreview.styleGuideSummary : `${cards.length} cards` })] }),
|
|
56573
56705
|
/* @__PURE__ */ jsxs("div", {
|
|
56574
56706
|
className: "space-y-4",
|
|
56575
56707
|
children: [
|
|
56576
|
-
|
|
56577
|
-
className: "rounded-md
|
|
56578
|
-
|
|
56579
|
-
|
|
56580
|
-
|
|
56581
|
-
|
|
56582
|
-
|
|
56583
|
-
|
|
56584
|
-
children:
|
|
56585
|
-
|
|
56586
|
-
|
|
56587
|
-
|
|
56588
|
-
|
|
56589
|
-
|
|
56590
|
-
|
|
56591
|
-
|
|
56592
|
-
|
|
56593
|
-
|
|
56594
|
-
|
|
56595
|
-
|
|
56596
|
-
|
|
56597
|
-
|
|
56598
|
-
placeholder: "Simple, soft-edged, lightly textured"
|
|
56708
|
+
/* @__PURE__ */ jsxs("div", {
|
|
56709
|
+
className: "grid grid-cols-2 rounded-md bg-muted p-1",
|
|
56710
|
+
"aria-label": "Icon set source",
|
|
56711
|
+
children: [/* @__PURE__ */ jsxs(Button, {
|
|
56712
|
+
type: "button",
|
|
56713
|
+
size: "sm",
|
|
56714
|
+
variant: view === "create" ? "secondary" : "ghost",
|
|
56715
|
+
onClick: () => setView("create"),
|
|
56716
|
+
children: [/* @__PURE__ */ jsx(Sparkles, {
|
|
56717
|
+
className: "mr-2 h-4 w-4",
|
|
56718
|
+
"aria-hidden": "true"
|
|
56719
|
+
}), "Make new"]
|
|
56720
|
+
}), /* @__PURE__ */ jsxs(Button, {
|
|
56721
|
+
type: "button",
|
|
56722
|
+
size: "sm",
|
|
56723
|
+
variant: view === "recent" ? "secondary" : "ghost",
|
|
56724
|
+
onClick: () => setView("recent"),
|
|
56725
|
+
children: [/* @__PURE__ */ jsx(Clock3, {
|
|
56726
|
+
className: "mr-2 h-4 w-4",
|
|
56727
|
+
"aria-hidden": "true"
|
|
56728
|
+
}), "Previously generated"]
|
|
56729
|
+
})]
|
|
56599
56730
|
}),
|
|
56600
|
-
state.kind === "failed" ? /* @__PURE__ */ jsx("p", {
|
|
56731
|
+
state.kind === "failed" || state.kind === "apply_failed" ? /* @__PURE__ */ jsx("p", {
|
|
56601
56732
|
role: "alert",
|
|
56602
56733
|
className: "text-sm text-destructive",
|
|
56603
56734
|
children: state.message
|
|
56604
56735
|
}) : null,
|
|
56605
|
-
/* @__PURE__ */
|
|
56606
|
-
|
|
56607
|
-
|
|
56608
|
-
|
|
56609
|
-
|
|
56610
|
-
|
|
56611
|
-
|
|
56612
|
-
|
|
56613
|
-
|
|
56614
|
-
|
|
56615
|
-
|
|
56616
|
-
|
|
56617
|
-
|
|
56618
|
-
|
|
56619
|
-
|
|
56620
|
-
|
|
56621
|
-
|
|
56622
|
-
|
|
56623
|
-
|
|
56624
|
-
|
|
56625
|
-
|
|
56626
|
-
|
|
56627
|
-
|
|
56628
|
-
|
|
56629
|
-
|
|
56630
|
-
|
|
56631
|
-
|
|
56736
|
+
view === "create" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
56737
|
+
styleGuideSummary || styleGuideEditHref ? /* @__PURE__ */ jsxs("div", {
|
|
56738
|
+
className: "rounded-md border bg-muted/20 px-3 py-2 text-sm",
|
|
56739
|
+
children: [styleGuideSummary ? /* @__PURE__ */ jsx("p", {
|
|
56740
|
+
className: "text-muted-foreground",
|
|
56741
|
+
children: styleGuideSummary
|
|
56742
|
+
}) : null, styleGuideEditHref ? /* @__PURE__ */ jsx("a", {
|
|
56743
|
+
href: styleGuideEditHref,
|
|
56744
|
+
className: "mt-1 inline-flex text-sm font-medium text-primary underline-offset-4 hover:underline",
|
|
56745
|
+
children: "Edit icon style"
|
|
56746
|
+
}) : null]
|
|
56747
|
+
}) : null,
|
|
56748
|
+
/* @__PURE__ */ jsx("label", {
|
|
56749
|
+
className: "block text-sm font-medium",
|
|
56750
|
+
htmlFor: "generated-icon-style-note",
|
|
56751
|
+
children: "Icon style"
|
|
56752
|
+
}),
|
|
56753
|
+
/* @__PURE__ */ jsx(Textarea, {
|
|
56754
|
+
id: "generated-icon-style-note",
|
|
56755
|
+
value: styleNote,
|
|
56756
|
+
maxLength: 240,
|
|
56757
|
+
disabled: state.kind === "generating",
|
|
56758
|
+
onChange: (event) => setStyleNote(event.currentTarget.value),
|
|
56759
|
+
placeholder: "Simple, soft-edged, lightly textured"
|
|
56760
|
+
}),
|
|
56761
|
+
activePreview ? /* @__PURE__ */ jsx("p", {
|
|
56762
|
+
className: "rounded-md bg-emerald-50 px-3 py-2 text-sm text-emerald-800",
|
|
56763
|
+
children: "Saved to your icon library. Apply the set when you’re ready to use it on these cards."
|
|
56764
|
+
}) : null,
|
|
56765
|
+
/* @__PURE__ */ jsx("div", {
|
|
56766
|
+
className: "grid gap-2 sm:grid-cols-2",
|
|
56767
|
+
children: cards.map((card) => {
|
|
56768
|
+
const previewAsset = activePreview ? activePreview.assets.find((asset) => asset.cardKey === card.cardKey) : null;
|
|
56769
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56770
|
+
className: "grid min-h-24 grid-cols-[3rem_1fr] gap-3 rounded-md border bg-muted/20 p-3",
|
|
56771
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
56772
|
+
className: "flex size-12 items-center justify-center rounded-md border bg-background",
|
|
56773
|
+
children: previewAsset?.src ? /* @__PURE__ */ jsx("img", {
|
|
56774
|
+
src: previewAsset.src,
|
|
56775
|
+
alt: "",
|
|
56776
|
+
className: "size-10 object-contain"
|
|
56777
|
+
}) : /* @__PURE__ */ jsx(ImagePlus, {
|
|
56778
|
+
className: "size-5 text-muted-foreground",
|
|
56779
|
+
"aria-hidden": "true"
|
|
56780
|
+
})
|
|
56781
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
56782
|
+
className: "min-w-0",
|
|
56783
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
56784
|
+
className: "truncate text-sm font-medium",
|
|
56785
|
+
children: card.title
|
|
56786
|
+
}), card.bodyText ? /* @__PURE__ */ jsx("p", {
|
|
56787
|
+
className: "overflow-hidden text-ellipsis text-xs text-muted-foreground",
|
|
56788
|
+
children: card.bodyText
|
|
56789
|
+
}) : null]
|
|
56790
|
+
})]
|
|
56791
|
+
}, card.cardKey);
|
|
56792
|
+
})
|
|
56632
56793
|
})
|
|
56794
|
+
] }) : /* @__PURE__ */ jsxs("div", {
|
|
56795
|
+
className: "max-h-[28rem] space-y-3 overflow-y-auto pr-1",
|
|
56796
|
+
children: [
|
|
56797
|
+
library.kind === "loading" ? /* @__PURE__ */ jsx("p", {
|
|
56798
|
+
className: "py-8 text-center text-sm text-muted-foreground",
|
|
56799
|
+
children: "Loading your icons…"
|
|
56800
|
+
}) : library.kind === "failed" && library.sets.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
56801
|
+
role: "alert",
|
|
56802
|
+
className: "py-8 text-center text-sm text-destructive",
|
|
56803
|
+
children: library.message
|
|
56804
|
+
}) : recentSets.length === 0 ? /* @__PURE__ */ jsxs("div", {
|
|
56805
|
+
className: "rounded-md border border-dashed px-4 py-8 text-center",
|
|
56806
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
56807
|
+
className: "text-sm font-medium",
|
|
56808
|
+
children: "No generated icon sets yet"
|
|
56809
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
56810
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
56811
|
+
children: "Make a set and it will stay here for reuse."
|
|
56812
|
+
})]
|
|
56813
|
+
}) : recentSets.map((set) => {
|
|
56814
|
+
const preview = librarySetToPreview(set, cards);
|
|
56815
|
+
const unavailableAssetIds = set.assets.flatMap((asset) => {
|
|
56816
|
+
if (asset.availability === "available") return [];
|
|
56817
|
+
const iconValue = parseBlockIconValue(asset.iconValue);
|
|
56818
|
+
return iconValue.kind === "generated" ? [iconValue.assetId] : [];
|
|
56819
|
+
});
|
|
56820
|
+
const compatibility = planGeneratedIconSetCompatibility({
|
|
56821
|
+
sourceFingerprintVersion: set.sourceFingerprintVersion,
|
|
56822
|
+
sourceCards: set.sourceCards,
|
|
56823
|
+
currentCards: cards,
|
|
56824
|
+
unavailableAssetIds
|
|
56825
|
+
});
|
|
56826
|
+
const canApplyWholeSet = compatibility.kind === "exact_match" || compatibility.kind === "key_match_content_changed";
|
|
56827
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56828
|
+
className: "rounded-md border p-3",
|
|
56829
|
+
children: [
|
|
56830
|
+
/* @__PURE__ */ jsxs("div", {
|
|
56831
|
+
className: "flex items-start justify-between gap-3",
|
|
56832
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
56833
|
+
className: "min-w-0",
|
|
56834
|
+
children: [
|
|
56835
|
+
/* @__PURE__ */ jsx("p", {
|
|
56836
|
+
className: "truncate text-sm font-medium",
|
|
56837
|
+
children: set.blockLabel
|
|
56838
|
+
}),
|
|
56839
|
+
/* @__PURE__ */ jsxs("p", {
|
|
56840
|
+
className: "text-xs text-muted-foreground",
|
|
56841
|
+
children: [
|
|
56842
|
+
formatGeneratedAt(set.createdAt),
|
|
56843
|
+
" · ",
|
|
56844
|
+
set.assets.length,
|
|
56845
|
+
" icons"
|
|
56846
|
+
]
|
|
56847
|
+
}),
|
|
56848
|
+
set.userStyleNote ? /* @__PURE__ */ jsx("p", {
|
|
56849
|
+
className: "mt-1 truncate text-xs text-muted-foreground",
|
|
56850
|
+
children: set.userStyleNote
|
|
56851
|
+
}) : null
|
|
56852
|
+
]
|
|
56853
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
56854
|
+
className: "flex shrink-0 items-center gap-2",
|
|
56855
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
56856
|
+
className: `rounded-full px-2 py-0.5 text-[11px] font-medium ${set.styleFreshness.kind === "current" ? "bg-emerald-100 text-emerald-800" : "bg-amber-100 text-amber-800"}`,
|
|
56857
|
+
children: set.styleFreshness.kind === "current" ? "Current style" : "Older style"
|
|
56858
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
56859
|
+
type: "button",
|
|
56860
|
+
size: "sm",
|
|
56861
|
+
disabled: preview.kind === "invalid" || !canApplyWholeSet || state.kind === "applying",
|
|
56862
|
+
onClick: () => {
|
|
56863
|
+
if (preview.kind === "valid") apply(preview.preview);
|
|
56864
|
+
},
|
|
56865
|
+
children: compatibility.kind === "key_match_content_changed" ? "Use anyway" : "Use set"
|
|
56866
|
+
})]
|
|
56867
|
+
})]
|
|
56868
|
+
}),
|
|
56869
|
+
/* @__PURE__ */ jsx("div", {
|
|
56870
|
+
className: "mt-3 flex gap-2 overflow-hidden",
|
|
56871
|
+
children: set.assets.slice(0, 6).map((asset) => /* @__PURE__ */ jsx("div", {
|
|
56872
|
+
className: "flex size-12 shrink-0 items-center justify-center rounded-md border bg-muted/20",
|
|
56873
|
+
children: asset.availability === "available" ? /* @__PURE__ */ jsx("img", {
|
|
56874
|
+
src: asset.renderAsset.src,
|
|
56875
|
+
alt: "",
|
|
56876
|
+
className: "size-10 object-contain"
|
|
56877
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
56878
|
+
title: "Generated icon unavailable",
|
|
56879
|
+
"aria-label": "Generated icon unavailable",
|
|
56880
|
+
children: /* @__PURE__ */ jsx(ImageOff, {
|
|
56881
|
+
className: "size-5 text-destructive",
|
|
56882
|
+
"aria-hidden": "true"
|
|
56883
|
+
})
|
|
56884
|
+
})
|
|
56885
|
+
}, asset.iconValue.kind === "generated" ? asset.iconValue.assetId : asset.cardKey))
|
|
56886
|
+
}),
|
|
56887
|
+
compatibility.kind === "set_incomplete" ? /* @__PURE__ */ jsx("p", {
|
|
56888
|
+
className: "mt-2 text-xs text-destructive",
|
|
56889
|
+
children: "One or more image files are unavailable, so this set can’t be applied as a whole. Available icons remain in each icon picker."
|
|
56890
|
+
}) : preview.kind === "invalid" || !canApplyWholeSet ? /* @__PURE__ */ jsx("p", {
|
|
56891
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
56892
|
+
children: "This set was made for different cards and can’t be applied as a whole. Individual icons remain available in each icon picker."
|
|
56893
|
+
}) : compatibility.kind === "key_match_content_changed" ? /* @__PURE__ */ jsx("p", {
|
|
56894
|
+
className: "mt-2 text-xs text-amber-700",
|
|
56895
|
+
children: "Your card wording has changed since this set was made. Check the thumbnails before using it."
|
|
56896
|
+
}) : set.styleFreshness.kind === "older_style" ? /* @__PURE__ */ jsx("p", {
|
|
56897
|
+
className: "mt-2 text-xs text-amber-700",
|
|
56898
|
+
children: "Made with an older icon style."
|
|
56899
|
+
}) : null
|
|
56900
|
+
]
|
|
56901
|
+
}, set.setId);
|
|
56902
|
+
}),
|
|
56903
|
+
library.kind === "failed" && library.sets.length > 0 ? /* @__PURE__ */ jsx("p", {
|
|
56904
|
+
role: "alert",
|
|
56905
|
+
className: "text-center text-sm text-destructive",
|
|
56906
|
+
children: library.message
|
|
56907
|
+
}) : null,
|
|
56908
|
+
library.loadMore ? /* @__PURE__ */ jsx(Button, {
|
|
56909
|
+
type: "button",
|
|
56910
|
+
variant: "outline",
|
|
56911
|
+
className: "w-full",
|
|
56912
|
+
disabled: library.kind === "loading_more",
|
|
56913
|
+
onClick: library.loadMore,
|
|
56914
|
+
children: library.kind === "loading_more" ? "Loading more…" : "Load more sets"
|
|
56915
|
+
}) : null
|
|
56916
|
+
]
|
|
56633
56917
|
})
|
|
56634
56918
|
]
|
|
56635
56919
|
}),
|
|
@@ -56640,63 +56924,134 @@ function GeneratedIconSetDialog({ open, onOpenChange, cards, styleGuideSummary,
|
|
|
56640
56924
|
onClick: () => close(false),
|
|
56641
56925
|
children: "Cancel"
|
|
56642
56926
|
}),
|
|
56643
|
-
/* @__PURE__ */ jsxs(Button, {
|
|
56927
|
+
view === "create" ? /* @__PURE__ */ jsxs(Button, {
|
|
56644
56928
|
type: "button",
|
|
56645
56929
|
variant: "outline",
|
|
56646
56930
|
disabled: !canGenerate,
|
|
56647
56931
|
onClick: () => {
|
|
56648
56932
|
generate();
|
|
56649
56933
|
},
|
|
56650
|
-
children: [
|
|
56934
|
+
children: [activePreview ? /* @__PURE__ */ jsx(RotateCcw, {
|
|
56651
56935
|
className: "mr-2 h-4 w-4",
|
|
56652
56936
|
"aria-hidden": "true"
|
|
56653
56937
|
}) : /* @__PURE__ */ jsx(Sparkles, {
|
|
56654
56938
|
className: "mr-2 h-4 w-4",
|
|
56655
56939
|
"aria-hidden": "true"
|
|
56656
|
-
}),
|
|
56657
|
-
}),
|
|
56658
|
-
/* @__PURE__ */ jsx(Button, {
|
|
56940
|
+
}), activePreview ? "Regenerate" : state.kind === "generating" ? "Generating" : "Generate"]
|
|
56941
|
+
}) : null,
|
|
56942
|
+
view === "create" ? /* @__PURE__ */ jsx(Button, {
|
|
56659
56943
|
type: "button",
|
|
56660
56944
|
disabled: !canApply,
|
|
56661
56945
|
onClick: () => {
|
|
56662
|
-
if (state.kind !== "preview_ready" || !onApply) return;
|
|
56946
|
+
if (state.kind !== "preview_ready" && state.kind !== "apply_failed" || !onApply) return;
|
|
56663
56947
|
apply(state.preview);
|
|
56664
56948
|
},
|
|
56665
56949
|
children: state.kind === "applying" ? "Applying" : "Apply set"
|
|
56666
|
-
})
|
|
56950
|
+
}) : null
|
|
56667
56951
|
] })
|
|
56668
56952
|
]
|
|
56669
56953
|
})
|
|
56670
56954
|
});
|
|
56671
56955
|
}
|
|
56672
56956
|
//#endregion
|
|
56957
|
+
//#region ../editor-blocks/src/block-editor/generatedIconApplyCoordination.ts
|
|
56958
|
+
const GENERATED_ICON_AUTOSAVE_TIMEOUT_MS = 15e3;
|
|
56959
|
+
async function saveBlocksNow(uiStore) {
|
|
56960
|
+
const before = uiStore.getState().autosave.blocks;
|
|
56961
|
+
uiStore.getState().autosave.saveNow(["blocks"]);
|
|
56962
|
+
if (!before) return true;
|
|
56963
|
+
return new Promise((resolve) => {
|
|
56964
|
+
let waitState = { kind: "waiting_for_start" };
|
|
56965
|
+
let settled = false;
|
|
56966
|
+
let unsubscribe = () => {};
|
|
56967
|
+
let timeout = null;
|
|
56968
|
+
const finish = (saved) => {
|
|
56969
|
+
if (settled) return;
|
|
56970
|
+
settled = true;
|
|
56971
|
+
if (timeout) clearTimeout(timeout);
|
|
56972
|
+
unsubscribe();
|
|
56973
|
+
resolve(saved);
|
|
56974
|
+
};
|
|
56975
|
+
const evaluate = () => {
|
|
56976
|
+
const status = uiStore.getState().autosave.blocks;
|
|
56977
|
+
if (!status) return finish(true);
|
|
56978
|
+
if (status.status === "saving") {
|
|
56979
|
+
waitState = { kind: "saving_seen" };
|
|
56980
|
+
return;
|
|
56981
|
+
}
|
|
56982
|
+
if (status.status === "success") {
|
|
56983
|
+
if (waitState.kind === "saving_seen" || status.lastSavedAt !== before.lastSavedAt) finish(true);
|
|
56984
|
+
return;
|
|
56985
|
+
}
|
|
56986
|
+
if (status.status === "error") {
|
|
56987
|
+
if (waitState.kind === "saving_seen" || before.status !== "error" || status.lastSavedAt !== before.lastSavedAt) finish(false);
|
|
56988
|
+
}
|
|
56989
|
+
};
|
|
56990
|
+
unsubscribe = uiStore.subscribe(evaluate);
|
|
56991
|
+
evaluate();
|
|
56992
|
+
if (!settled) timeout = setTimeout(() => finish(false), GENERATED_ICON_AUTOSAVE_TIMEOUT_MS);
|
|
56993
|
+
});
|
|
56994
|
+
}
|
|
56995
|
+
function parseRenderAssets(preview) {
|
|
56996
|
+
const assets = [];
|
|
56997
|
+
for (const asset of preview.assets) {
|
|
56998
|
+
if (!asset.renderAsset) return null;
|
|
56999
|
+
const setId = parseGeneratedIconSetId(asset.renderAsset.setId);
|
|
57000
|
+
const assetId = parseGeneratedIconAssetId(asset.renderAsset.assetId);
|
|
57001
|
+
if (!setId || !assetId || setId !== asset.iconValue.setId || assetId !== asset.iconValue.assetId) return null;
|
|
57002
|
+
assets.push({
|
|
57003
|
+
setId,
|
|
57004
|
+
assetId,
|
|
57005
|
+
src: asset.renderAsset.src,
|
|
57006
|
+
...asset.renderAsset.width === void 0 ? {} : { width: asset.renderAsset.width },
|
|
57007
|
+
...asset.renderAsset.height === void 0 ? {} : { height: asset.renderAsset.height }
|
|
57008
|
+
});
|
|
57009
|
+
}
|
|
57010
|
+
return assets;
|
|
57011
|
+
}
|
|
57012
|
+
async function applyGeneratedIconSetToEditor({ blockId, content, preview, uiStore }) {
|
|
57013
|
+
const renderAssets = parseRenderAssets(preview);
|
|
57014
|
+
if (!renderAssets) return {
|
|
57015
|
+
kind: "invalid_render_asset",
|
|
57016
|
+
cardKey: preview.assets.find((asset) => !asset.renderAsset)?.cardKey ?? "unknown"
|
|
57017
|
+
};
|
|
57018
|
+
const result = applyGeneratedFeatureCardIconSet({
|
|
57019
|
+
blockId,
|
|
57020
|
+
content,
|
|
57021
|
+
drafts: uiStore.getState().drafts,
|
|
57022
|
+
assets: preview.assets
|
|
57023
|
+
});
|
|
57024
|
+
if (result.kind !== "applied") return result;
|
|
57025
|
+
uiStore.getState().generatedIconAssets.setForBlock(blockId, renderAssets);
|
|
57026
|
+
return await saveBlocksNow(uiStore) ? result : { kind: "autosave_failed" };
|
|
57027
|
+
}
|
|
57028
|
+
//#endregion
|
|
56673
57029
|
//#region ../editor-blocks/src/block-editor/FeatureCardIconsPanel.tsx
|
|
56674
57030
|
function supportsFeatureCardIconActions(blockKind) {
|
|
56675
57031
|
return blockKind === "block.feature-cards";
|
|
56676
57032
|
}
|
|
56677
|
-
function FeatureCardIconsPanel({ block, uiStore, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet
|
|
57033
|
+
function FeatureCardIconsPanel({ block, uiStore, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet }) {
|
|
56678
57034
|
const [generateDialogOpen, setGenerateDialogOpen] = useState(false);
|
|
56679
57035
|
const blockId = typeof block.id === "string" ? unsafeAsEditorBlockId(block.id) : null;
|
|
56680
57036
|
const content = useStoreSelector(uiStore, (state) => blockId ? state.drafts.getCurrentValues(blockId) : null) ?? block.draftContent ?? block.content ?? null;
|
|
56681
57037
|
const status = useMemo(() => getFeatureCardIconStatus(content), [content]);
|
|
56682
57038
|
const dialogCards = useMemo(() => getFeatureCardIconDialogCards(content), [content]);
|
|
56683
57039
|
const styleSummary = useMemo(() => getFeatureCardGeneratedIconStyleSummary(content, currentStyleGuideVersionId), [content, currentStyleGuideVersionId]);
|
|
56684
|
-
const isComplete = status.totalCards > 0 && status.cardsWithIcons >= status.totalCards;
|
|
56685
57040
|
const hasStaleGeneratedIcons = styleSummary.kind === "available" && styleSummary.staleCount > 0;
|
|
56686
57041
|
async function applyGeneratedIconSetPreview(preview) {
|
|
56687
57042
|
if (!blockId) return {
|
|
56688
57043
|
kind: "failed",
|
|
56689
57044
|
message: "Could not apply generated icon set"
|
|
56690
57045
|
};
|
|
56691
|
-
const
|
|
56692
|
-
if (applyGeneratedFeatureCardIconSet({
|
|
57046
|
+
const result = await applyGeneratedIconSetToEditor({
|
|
56693
57047
|
blockId,
|
|
56694
57048
|
content,
|
|
56695
|
-
|
|
56696
|
-
|
|
56697
|
-
})
|
|
57049
|
+
preview,
|
|
57050
|
+
uiStore
|
|
57051
|
+
});
|
|
57052
|
+
if (result.kind !== "applied") return {
|
|
56698
57053
|
kind: "failed",
|
|
56699
|
-
message: "Could not apply generated icon set"
|
|
57054
|
+
message: result.kind === "autosave_failed" ? "The icons are ready, but we couldn’t save this page. Please try again." : "Could not apply generated icon set"
|
|
56700
57055
|
};
|
|
56701
57056
|
return { kind: "applied" };
|
|
56702
57057
|
}
|
|
@@ -56707,51 +57062,31 @@ function FeatureCardIconsPanel({ block, uiStore, currentStyleGuideVersionId, ico
|
|
|
56707
57062
|
"data-testid": "feature-card-icons-panel",
|
|
56708
57063
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
56709
57064
|
className: "flex flex-wrap items-center gap-2",
|
|
56710
|
-
children: [
|
|
56711
|
-
|
|
56712
|
-
|
|
56713
|
-
|
|
56714
|
-
|
|
56715
|
-
|
|
56716
|
-
|
|
56717
|
-
|
|
56718
|
-
|
|
56719
|
-
|
|
56720
|
-
|
|
56721
|
-
|
|
56722
|
-
|
|
56723
|
-
|
|
56724
|
-
|
|
56725
|
-
|
|
56726
|
-
|
|
56727
|
-
|
|
56728
|
-
|
|
56729
|
-
|
|
56730
|
-
|
|
56731
|
-
|
|
56732
|
-
|
|
56733
|
-
|
|
56734
|
-
|
|
56735
|
-
drafts: uiStore.getState().drafts
|
|
56736
|
-
});
|
|
56737
|
-
},
|
|
56738
|
-
children: [/* @__PURE__ */ jsx(Sparkles, {
|
|
56739
|
-
className: "mr-2 h-4 w-4",
|
|
56740
|
-
"aria-hidden": "true"
|
|
56741
|
-
}), "Suggest icons"]
|
|
56742
|
-
}),
|
|
56743
|
-
/* @__PURE__ */ jsxs(Button, {
|
|
56744
|
-
type: "button",
|
|
56745
|
-
variant: "outline",
|
|
56746
|
-
size: "sm",
|
|
56747
|
-
disabled: status.totalCards === 0,
|
|
56748
|
-
onClick: () => setGenerateDialogOpen(true),
|
|
56749
|
-
children: [/* @__PURE__ */ jsx(ImagePlus, {
|
|
56750
|
-
className: "mr-2 h-4 w-4",
|
|
56751
|
-
"aria-hidden": "true"
|
|
56752
|
-
}), "Generate icon set"]
|
|
56753
|
-
})
|
|
56754
|
-
]
|
|
57065
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
57066
|
+
className: "min-w-0 flex-1",
|
|
57067
|
+
children: [/* @__PURE__ */ jsx("h3", {
|
|
57068
|
+
className: "text-sm font-medium",
|
|
57069
|
+
children: "Icons"
|
|
57070
|
+
}), /* @__PURE__ */ jsxs("p", {
|
|
57071
|
+
className: "text-xs text-muted-foreground",
|
|
57072
|
+
children: [
|
|
57073
|
+
status.cardsWithIcons,
|
|
57074
|
+
" of ",
|
|
57075
|
+
status.totalCards,
|
|
57076
|
+
" cards"
|
|
57077
|
+
]
|
|
57078
|
+
})]
|
|
57079
|
+
}), /* @__PURE__ */ jsxs(Button, {
|
|
57080
|
+
type: "button",
|
|
57081
|
+
variant: "outline",
|
|
57082
|
+
size: "sm",
|
|
57083
|
+
disabled: status.totalCards === 0,
|
|
57084
|
+
onClick: () => setGenerateDialogOpen(true),
|
|
57085
|
+
children: [/* @__PURE__ */ jsx(ImagePlus, {
|
|
57086
|
+
className: "mr-2 h-4 w-4",
|
|
57087
|
+
"aria-hidden": "true"
|
|
57088
|
+
}), "Generate icon set"]
|
|
57089
|
+
})]
|
|
56755
57090
|
}), hasStaleGeneratedIcons ? /* @__PURE__ */ jsxs(Callout, {
|
|
56756
57091
|
tone: "warning",
|
|
56757
57092
|
className: "mt-3 flex flex-wrap items-center gap-2",
|
|
@@ -56782,7 +57117,7 @@ function FeatureCardIconsPanel({ block, uiStore, currentStyleGuideVersionId, ico
|
|
|
56782
57117
|
}
|
|
56783
57118
|
//#endregion
|
|
56784
57119
|
//#region ../editor-blocks/src/block-editor/BlockCardBody.tsx
|
|
56785
|
-
function BlockCardBody({ siteId, block, manifest, uiStore, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, hideThemeV2RawStyleFields = false, pageDesignBlock = null, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet
|
|
57120
|
+
function BlockCardBody({ siteId, block, manifest, uiStore, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, hideThemeV2RawStyleFields = false, pageDesignBlock = null, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet }) {
|
|
56786
57121
|
return /* @__PURE__ */ jsxs(CardContent, {
|
|
56787
57122
|
className: "space-y-4 pb-6",
|
|
56788
57123
|
children: [/* @__PURE__ */ jsx(FeatureCardIconsPanel, {
|
|
@@ -56791,8 +57126,7 @@ function BlockCardBody({ siteId, block, manifest, uiStore, hasRecoveryConflict,
|
|
|
56791
57126
|
currentStyleGuideVersionId,
|
|
56792
57127
|
iconStyleGuideSummary,
|
|
56793
57128
|
iconStyleGuideEditHref,
|
|
56794
|
-
onGenerateIconSet
|
|
56795
|
-
onApplyGeneratedIconSet
|
|
57129
|
+
onGenerateIconSet
|
|
56796
57130
|
}), /* @__PURE__ */ jsx(BlockForm, {
|
|
56797
57131
|
siteId,
|
|
56798
57132
|
block,
|
|
@@ -57015,7 +57349,7 @@ function useDraftContent(uiStore, blockId) {
|
|
|
57015
57349
|
}
|
|
57016
57350
|
//#endregion
|
|
57017
57351
|
//#region ../editor-blocks/src/block-editor/blockHeaderActionPlan.ts
|
|
57018
|
-
function deriveBlockHeaderActionPlan({ actionPresentation, blockId, settingsAvailable, featureCardIconActionsAvailable,
|
|
57352
|
+
function deriveBlockHeaderActionPlan({ actionPresentation, blockId, settingsAvailable, featureCardIconActionsAvailable, generatedIconSetActionsAvailable, hasStaleGeneratedIcons, featureCardIconDialogCardsCount, duplicateAvailable, duplicateDisabled, deleteAvailable, deleteDisabled }) {
|
|
57019
57353
|
const customizeAction = deriveCustomizeAction({
|
|
57020
57354
|
actionPresentation,
|
|
57021
57355
|
blockId,
|
|
@@ -57035,7 +57369,6 @@ function deriveBlockHeaderActionPlan({ actionPresentation, blockId, settingsAvai
|
|
|
57035
57369
|
});
|
|
57036
57370
|
const iconActions = deriveIconActions({
|
|
57037
57371
|
featureCardIconActionsAvailable,
|
|
57038
|
-
featureCardIconsComplete,
|
|
57039
57372
|
generatedIconSetActionsAvailable,
|
|
57040
57373
|
hasStaleGeneratedIcons,
|
|
57041
57374
|
featureCardIconDialogCardsCount
|
|
@@ -57079,16 +57412,13 @@ function deriveCustomizeAction({ actionPresentation, blockId, settingsAvailable
|
|
|
57079
57412
|
default: return assertNever$5(actionPresentation.customize);
|
|
57080
57413
|
}
|
|
57081
57414
|
}
|
|
57082
|
-
function deriveIconActions({ featureCardIconActionsAvailable,
|
|
57415
|
+
function deriveIconActions({ featureCardIconActionsAvailable, generatedIconSetActionsAvailable, hasStaleGeneratedIcons, featureCardIconDialogCardsCount }) {
|
|
57083
57416
|
if (!featureCardIconActionsAvailable) return [];
|
|
57084
|
-
return [{
|
|
57085
|
-
kind: "suggest-icons",
|
|
57086
|
-
disabled: featureCardIconsComplete
|
|
57087
|
-
}, ...generatedIconSetActionsAvailable ? [{
|
|
57417
|
+
return generatedIconSetActionsAvailable ? [{
|
|
57088
57418
|
kind: "generated-icon-set",
|
|
57089
57419
|
disabled: featureCardIconDialogCardsCount === 0,
|
|
57090
57420
|
stale: hasStaleGeneratedIcons
|
|
57091
|
-
}] : []
|
|
57421
|
+
}] : [];
|
|
57092
57422
|
}
|
|
57093
57423
|
function deriveStructureActions({ duplicateAvailable, duplicateDisabled, deleteAvailable, deleteDisabled }) {
|
|
57094
57424
|
return [...duplicateAvailable ? [{
|
|
@@ -57101,7 +57431,7 @@ function deriveStructureActions({ duplicateAvailable, duplicateDisabled, deleteA
|
|
|
57101
57431
|
}
|
|
57102
57432
|
//#endregion
|
|
57103
57433
|
//#region ../editor-blocks/src/block-editor/BlockCardHeader.tsx
|
|
57104
|
-
function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, onDuplicate, onDelete, dragListeners, canReorder, collapsed, onToggleCollapsed, contentId, uiStore, widgetOverrides, theme, hideThemeV2RawStyleFields = false, reorderControlMode = "full", actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet
|
|
57434
|
+
function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, onDuplicate, onDelete, dragListeners, canReorder, collapsed, onToggleCollapsed, contentId, uiStore, widgetOverrides, theme, hideThemeV2RawStyleFields = false, reorderControlMode = "full", actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet }) {
|
|
57105
57435
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
|
57106
57436
|
const [settingsDialogOpen, setSettingsDialogOpen] = useState(false);
|
|
57107
57437
|
const [generateIconSetDialogOpen, setGenerateIconSetDialogOpen] = useState(false);
|
|
@@ -57113,7 +57443,6 @@ function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, o
|
|
|
57113
57443
|
const currentContent = useStoreSelector(uiStore, (state) => supportsIconActions && blockId ? state.drafts.getCurrentValues(blockId) : null);
|
|
57114
57444
|
const featureCardIconStatus = supportsIconActions ? getFeatureCardIconStatus(currentContent ?? block.draftContent ?? contentToUse) : null;
|
|
57115
57445
|
const featureCardIconActionsAvailable = Boolean(blockId) && supportsIconActions && (featureCardIconStatus?.totalCards ?? 0) > 0;
|
|
57116
|
-
const featureCardIconsComplete = featureCardIconStatus !== null && featureCardIconStatus.totalCards > 0 && featureCardIconStatus.cardsWithIcons >= featureCardIconStatus.totalCards;
|
|
57117
57446
|
const generatedIconSetActionsAvailable = featureCardIconActionsAvailable && Boolean(onGenerateIconSet);
|
|
57118
57447
|
const featureCardIconContent = currentContent ?? block.draftContent ?? contentToUse;
|
|
57119
57448
|
const featureCardIconDialogCards = supportsIconActions ? getFeatureCardIconDialogCards(featureCardIconContent) : [];
|
|
@@ -57124,15 +57453,15 @@ function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, o
|
|
|
57124
57453
|
kind: "failed",
|
|
57125
57454
|
message: "Could not apply generated icon set"
|
|
57126
57455
|
};
|
|
57127
|
-
const
|
|
57128
|
-
if (applyGeneratedFeatureCardIconSet({
|
|
57456
|
+
const result = await applyGeneratedIconSetToEditor({
|
|
57129
57457
|
blockId,
|
|
57130
57458
|
content: featureCardIconContent,
|
|
57131
|
-
|
|
57132
|
-
|
|
57133
|
-
})
|
|
57459
|
+
preview,
|
|
57460
|
+
uiStore
|
|
57461
|
+
});
|
|
57462
|
+
if (result.kind !== "applied") return {
|
|
57134
57463
|
kind: "failed",
|
|
57135
|
-
message: "Could not apply generated icon set"
|
|
57464
|
+
message: result.kind === "autosave_failed" ? "The icons are ready, but we couldn’t save this page. Please try again." : "Could not apply generated icon set"
|
|
57136
57465
|
};
|
|
57137
57466
|
return { kind: "applied" };
|
|
57138
57467
|
}
|
|
@@ -57142,7 +57471,6 @@ function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, o
|
|
|
57142
57471
|
blockId,
|
|
57143
57472
|
settingsAvailable,
|
|
57144
57473
|
featureCardIconActionsAvailable,
|
|
57145
|
-
featureCardIconsComplete,
|
|
57146
57474
|
generatedIconSetActionsAvailable,
|
|
57147
57475
|
hasStaleGeneratedIcons,
|
|
57148
57476
|
featureCardIconDialogCardsCount: featureCardIconDialogCards.length,
|
|
@@ -57173,14 +57501,6 @@ function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, o
|
|
|
57173
57501
|
}
|
|
57174
57502
|
setSettingsDialogOpen(true);
|
|
57175
57503
|
return;
|
|
57176
|
-
case "suggest-icons":
|
|
57177
|
-
if (!blockId || action.disabled) return;
|
|
57178
|
-
applyCuratedFeatureCardIconSuggestions({
|
|
57179
|
-
blockId,
|
|
57180
|
-
content: currentContent ?? block.draftContent ?? contentToUse,
|
|
57181
|
-
drafts: uiStore.getState().drafts
|
|
57182
|
-
});
|
|
57183
|
-
return;
|
|
57184
57504
|
case "generated-icon-set":
|
|
57185
57505
|
if (action.disabled) return;
|
|
57186
57506
|
setGenerateIconSetDialogOpen(true);
|
|
@@ -57342,7 +57662,6 @@ function BlockCardHeader({ block, manifest, isFirst, isLast, isMoving, onMove, o
|
|
|
57342
57662
|
function menuActionIcon(action) {
|
|
57343
57663
|
switch (action.kind) {
|
|
57344
57664
|
case "customize": return /* @__PURE__ */ jsx(Settings, { className: "mr-2 h-4 w-4" });
|
|
57345
|
-
case "suggest-icons": return /* @__PURE__ */ jsx(Sparkles, { className: "mr-2 h-4 w-4" });
|
|
57346
57665
|
case "generated-icon-set": return action.stale ? /* @__PURE__ */ jsx(RotateCcw, { className: "mr-2 h-4 w-4" }) : /* @__PURE__ */ jsx(ImagePlus, { className: "mr-2 h-4 w-4" });
|
|
57347
57666
|
case "duplicate": return /* @__PURE__ */ jsx(Copy, { className: "mr-2 h-4 w-4" });
|
|
57348
57667
|
case "delete": return /* @__PURE__ */ jsx(Trash2, { className: "mr-2 h-4 w-4" });
|
|
@@ -57352,7 +57671,6 @@ function menuActionIcon(action) {
|
|
|
57352
57671
|
function menuActionLabel(action) {
|
|
57353
57672
|
switch (action.kind) {
|
|
57354
57673
|
case "customize": return "Customize";
|
|
57355
|
-
case "suggest-icons": return "Suggest icons";
|
|
57356
57674
|
case "generated-icon-set": return action.stale ? "Regenerate icon set" : "Generate icon set";
|
|
57357
57675
|
case "duplicate": return "Duplicate";
|
|
57358
57676
|
case "delete": return "Delete";
|
|
@@ -57361,7 +57679,7 @@ function menuActionLabel(action) {
|
|
|
57361
57679
|
}
|
|
57362
57680
|
//#endregion
|
|
57363
57681
|
//#region ../editor-blocks/src/block-editor/BlockCard.tsx
|
|
57364
|
-
function BlockCard({ siteId, block, manifest, isFirst, isLast, isMoving, onMove, onDuplicate, onDelete, dragListeners, canReorder, collapsed, onCollapsedChange, highlighted, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, uiStore, hideThemeV2RawStyleFields = false, pageDesignBlock = null, reorderControlMode = DEFAULT_REORDER_CONTROL_MODE, actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet
|
|
57682
|
+
function BlockCard({ siteId, block, manifest, isFirst, isLast, isMoving, onMove, onDuplicate, onDelete, dragListeners, canReorder, collapsed, onCollapsedChange, highlighted, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, uiStore, hideThemeV2RawStyleFields = false, pageDesignBlock = null, reorderControlMode = DEFAULT_REORDER_CONTROL_MODE, actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet }) {
|
|
57365
57683
|
const contentId = block.id ? `builder-block-content-${block.id}` : void 0;
|
|
57366
57684
|
return /* @__PURE__ */ jsx(Card, {
|
|
57367
57685
|
className: cn$1("w-full p-0 transition-shadow", highlighted ? "builder-editor-block-highlight" : ""),
|
|
@@ -57393,8 +57711,7 @@ function BlockCard({ siteId, block, manifest, isFirst, isLast, isMoving, onMove,
|
|
|
57393
57711
|
currentStyleGuideVersionId,
|
|
57394
57712
|
iconStyleGuideSummary,
|
|
57395
57713
|
iconStyleGuideEditHref,
|
|
57396
|
-
onGenerateIconSet
|
|
57397
|
-
onApplyGeneratedIconSet
|
|
57714
|
+
onGenerateIconSet
|
|
57398
57715
|
}), /* @__PURE__ */ jsx(CollapsibleContent, {
|
|
57399
57716
|
id: contentId,
|
|
57400
57717
|
children: /* @__PURE__ */ jsx(BlockCardBody, {
|
|
@@ -57413,8 +57730,7 @@ function BlockCard({ siteId, block, manifest, isFirst, isLast, isMoving, onMove,
|
|
|
57413
57730
|
currentStyleGuideVersionId,
|
|
57414
57731
|
iconStyleGuideSummary,
|
|
57415
57732
|
iconStyleGuideEditHref,
|
|
57416
|
-
onGenerateIconSet
|
|
57417
|
-
onApplyGeneratedIconSet
|
|
57733
|
+
onGenerateIconSet
|
|
57418
57734
|
})
|
|
57419
57735
|
})]
|
|
57420
57736
|
})
|
|
@@ -57422,7 +57738,7 @@ function BlockCard({ siteId, block, manifest, isFirst, isLast, isMoving, onMove,
|
|
|
57422
57738
|
}
|
|
57423
57739
|
//#endregion
|
|
57424
57740
|
//#region ../editor-blocks/src/block-editor/SortableBlockItem.tsx
|
|
57425
|
-
const SortableBlockItem = memo(function SortableBlockItem({ siteId, block, onMove, onDuplicate, onDelete, isFirst, isLast, isMoving, isDraggable, collapsed, onCollapsedChange, highlighted, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, uiStore, sdkConfig, customBlocks = [], hideThemeV2RawStyleFields = false, pageDesignBlock = null, reorderControlMode = DEFAULT_REORDER_CONTROL_MODE, actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet
|
|
57741
|
+
const SortableBlockItem = memo(function SortableBlockItem({ siteId, block, onMove, onDuplicate, onDelete, isFirst, isLast, isMoving, isDraggable, collapsed, onCollapsedChange, highlighted, hasRecoveryConflict, focusSignal, onFocusHandled, onBlockSave, theme, widgetOverrides, uiStore, sdkConfig, customBlocks = [], hideThemeV2RawStyleFields = false, pageDesignBlock = null, reorderControlMode = DEFAULT_REORDER_CONTROL_MODE, actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION, currentStyleGuideVersionId, iconStyleGuideSummary, iconStyleGuideEditHref, onGenerateIconSet }) {
|
|
57426
57742
|
const sortable = useSortable({
|
|
57427
57743
|
id: block.id,
|
|
57428
57744
|
disabled: !isDraggable
|
|
@@ -57495,14 +57811,39 @@ const SortableBlockItem = memo(function SortableBlockItem({ siteId, block, onMov
|
|
|
57495
57811
|
currentStyleGuideVersionId,
|
|
57496
57812
|
iconStyleGuideSummary,
|
|
57497
57813
|
iconStyleGuideEditHref,
|
|
57498
|
-
onGenerateIconSet
|
|
57499
|
-
onApplyGeneratedIconSet
|
|
57814
|
+
onGenerateIconSet
|
|
57500
57815
|
})
|
|
57501
57816
|
});
|
|
57502
57817
|
});
|
|
57503
57818
|
//#endregion
|
|
57819
|
+
//#region ../editor-blocks/src/widgets/icon-picker/loaders.ts
|
|
57820
|
+
async function loadGeneratedIconLibraryPage(apiClient, input) {
|
|
57821
|
+
return unwrapResponse(await apiClient({
|
|
57822
|
+
endpoint: "listGeneratedIconSets",
|
|
57823
|
+
params: {
|
|
57824
|
+
siteId: input.siteId,
|
|
57825
|
+
...input.cursor ? { cursor: input.cursor } : {},
|
|
57826
|
+
...input.limit === void 0 ? {} : { limit: String(input.limit) }
|
|
57827
|
+
}
|
|
57828
|
+
}));
|
|
57829
|
+
}
|
|
57830
|
+
//#endregion
|
|
57504
57831
|
//#region ../editor-blocks/src/BlockEditor.tsx
|
|
57505
|
-
|
|
57832
|
+
function buildDashboardPath(dashboardBaseUrl, path) {
|
|
57833
|
+
const baseUrl = dashboardBaseUrl?.trim();
|
|
57834
|
+
if (!baseUrl) return path;
|
|
57835
|
+
return `${baseUrl.replace(/\/+$/u, "")}${path}`;
|
|
57836
|
+
}
|
|
57837
|
+
function getApiRequestErrorMessage(error) {
|
|
57838
|
+
return extractApiEnvelopeErrorDetails(error.body).message ?? error.message;
|
|
57839
|
+
}
|
|
57840
|
+
const GENERATED_ICON_SET_FRIENDLY_ERROR = "We could not make those icons this time. Please try again in a moment.";
|
|
57841
|
+
function getGeneratedIconSetErrorMessage(error) {
|
|
57842
|
+
if (!(error instanceof ApiRequestError)) return GENERATED_ICON_SET_FRIENDLY_ERROR;
|
|
57843
|
+
const message = getApiRequestErrorMessage(error);
|
|
57844
|
+
return message === "Internal server error" || /^Request to .+ failed with status \d+$/u.test(message) ? GENERATED_ICON_SET_FRIENDLY_ERROR : message;
|
|
57845
|
+
}
|
|
57846
|
+
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) {
|
|
57506
57847
|
const [blockList, setBlockList] = useState(() => normalizeBlockListInitial(blocks));
|
|
57507
57848
|
const [errorMessage, setErrorMessage] = useState(null);
|
|
57508
57849
|
const [highlightedBlockId, setHighlightedBlockId] = useState(null);
|
|
@@ -57516,6 +57857,11 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, owner, blocks, rec
|
|
|
57516
57857
|
const [fetchedContentTypes, setFetchedContentTypes] = useState(enabledContentTypes);
|
|
57517
57858
|
const [fetchingContentTypes, setFetchingContentTypes] = useState(false);
|
|
57518
57859
|
const [iconStyleGuide, setIconStyleGuide] = useState(null);
|
|
57860
|
+
const [generatedIconLibrary, setGeneratedIconLibrary] = useState({
|
|
57861
|
+
kind: "loading",
|
|
57862
|
+
sets: [],
|
|
57863
|
+
nextCursor: null
|
|
57864
|
+
});
|
|
57519
57865
|
const allowReordering = enableReordering;
|
|
57520
57866
|
const allowCreation = enableCreation;
|
|
57521
57867
|
const allowDeletion = enableDeletion;
|
|
@@ -57545,7 +57891,7 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, owner, blocks, rec
|
|
|
57545
57891
|
setIconStyleGuide(versionId ? {
|
|
57546
57892
|
versionId,
|
|
57547
57893
|
summary: response.guide.displaySummary,
|
|
57548
|
-
editHref: `/dashboard/sites/${siteId}/settings/icon-style-guide`
|
|
57894
|
+
editHref: buildDashboardPath(dashboardBaseUrl, `/dashboard/sites/${siteId}/settings/icon-style-guide`)
|
|
57549
57895
|
} : null);
|
|
57550
57896
|
}).catch(() => {
|
|
57551
57897
|
if (!cancelled) setIconStyleGuide(null);
|
|
@@ -57553,7 +57899,81 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, owner, blocks, rec
|
|
|
57553
57899
|
return () => {
|
|
57554
57900
|
cancelled = true;
|
|
57555
57901
|
};
|
|
57902
|
+
}, [
|
|
57903
|
+
apiClient,
|
|
57904
|
+
dashboardBaseUrl,
|
|
57905
|
+
siteId
|
|
57906
|
+
]);
|
|
57907
|
+
useEffect(() => {
|
|
57908
|
+
if (typeof apiClient !== "function") {
|
|
57909
|
+
setGeneratedIconLibrary({
|
|
57910
|
+
kind: "failed",
|
|
57911
|
+
sets: [],
|
|
57912
|
+
nextCursor: null,
|
|
57913
|
+
message: "Generated icon library is unavailable"
|
|
57914
|
+
});
|
|
57915
|
+
return;
|
|
57916
|
+
}
|
|
57917
|
+
let cancelled = false;
|
|
57918
|
+
setGeneratedIconLibrary((current) => ({
|
|
57919
|
+
kind: "loading",
|
|
57920
|
+
sets: current.sets,
|
|
57921
|
+
nextCursor: current.nextCursor
|
|
57922
|
+
}));
|
|
57923
|
+
Promise.resolve().then(() => loadGeneratedIconLibraryPage(apiClient, {
|
|
57924
|
+
siteId,
|
|
57925
|
+
limit: 24
|
|
57926
|
+
})).then((response) => {
|
|
57927
|
+
if (cancelled) return;
|
|
57928
|
+
setGeneratedIconLibrary({
|
|
57929
|
+
kind: "ready",
|
|
57930
|
+
sets: response.sets,
|
|
57931
|
+
nextCursor: response.nextCursor
|
|
57932
|
+
});
|
|
57933
|
+
}).catch(() => {
|
|
57934
|
+
if (!cancelled) setGeneratedIconLibrary((current) => ({
|
|
57935
|
+
kind: "failed",
|
|
57936
|
+
sets: current.sets,
|
|
57937
|
+
nextCursor: current.nextCursor,
|
|
57938
|
+
message: "Could not load previously generated icons"
|
|
57939
|
+
}));
|
|
57940
|
+
});
|
|
57941
|
+
return () => {
|
|
57942
|
+
cancelled = true;
|
|
57943
|
+
};
|
|
57556
57944
|
}, [apiClient, siteId]);
|
|
57945
|
+
const loadMoreGeneratedIcons = useCallback(() => {
|
|
57946
|
+
if (typeof apiClient !== "function" || !generatedIconLibrary.nextCursor || generatedIconLibrary.kind === "loading" || generatedIconLibrary.kind === "loading_more") return;
|
|
57947
|
+
const cursor = generatedIconLibrary.nextCursor;
|
|
57948
|
+
const currentSets = generatedIconLibrary.sets;
|
|
57949
|
+
setGeneratedIconLibrary({
|
|
57950
|
+
kind: "loading_more",
|
|
57951
|
+
sets: currentSets,
|
|
57952
|
+
nextCursor: cursor
|
|
57953
|
+
});
|
|
57954
|
+
loadGeneratedIconLibraryPage(apiClient, {
|
|
57955
|
+
siteId,
|
|
57956
|
+
cursor,
|
|
57957
|
+
limit: 24
|
|
57958
|
+
}).then((response) => {
|
|
57959
|
+
setGeneratedIconLibrary((current) => ({
|
|
57960
|
+
kind: "ready",
|
|
57961
|
+
sets: [...current.sets, ...response.sets.filter((set) => !current.sets.some((currentSet) => currentSet.setId === set.setId))],
|
|
57962
|
+
nextCursor: response.nextCursor
|
|
57963
|
+
}));
|
|
57964
|
+
}).catch(() => {
|
|
57965
|
+
setGeneratedIconLibrary((current) => ({
|
|
57966
|
+
kind: "failed",
|
|
57967
|
+
sets: current.sets,
|
|
57968
|
+
nextCursor: cursor,
|
|
57969
|
+
message: "Could not load more generated icons"
|
|
57970
|
+
}));
|
|
57971
|
+
});
|
|
57972
|
+
}, [
|
|
57973
|
+
apiClient,
|
|
57974
|
+
generatedIconLibrary,
|
|
57975
|
+
siteId
|
|
57976
|
+
]);
|
|
57557
57977
|
const generateFeatureCardIconSet = useCallback(async (input) => {
|
|
57558
57978
|
if (typeof apiClient !== "function") return {
|
|
57559
57979
|
kind: "failed",
|
|
@@ -57576,53 +57996,37 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, owner, blocks, rec
|
|
|
57576
57996
|
},
|
|
57577
57997
|
options: input.signal ? { signal: input.signal } : void 0
|
|
57578
57998
|
}));
|
|
57579
|
-
const assets = response.
|
|
57999
|
+
const assets = response.set.assets.map((asset) => {
|
|
57580
58000
|
const iconValue = parseBlockIconValue(asset.iconValue);
|
|
57581
|
-
if (iconValue.kind !== "generated") throw new Error(
|
|
58001
|
+
if (iconValue.kind !== "generated") throw new Error(GENERATED_ICON_SET_FRIENDLY_ERROR);
|
|
57582
58002
|
return {
|
|
57583
58003
|
cardKey: asset.cardKey,
|
|
57584
58004
|
title: input.cards.find((card) => card.cardKey === asset.cardKey)?.title ?? asset.cardKey,
|
|
57585
|
-
src: asset.src,
|
|
57586
|
-
iconValue
|
|
58005
|
+
src: asset.renderAsset?.src ?? "",
|
|
58006
|
+
iconValue,
|
|
58007
|
+
renderAsset: asset.renderAsset
|
|
57587
58008
|
};
|
|
57588
58009
|
});
|
|
58010
|
+
setGeneratedIconLibrary((current) => ({
|
|
58011
|
+
kind: "ready",
|
|
58012
|
+
sets: [response.set, ...current.sets.filter((set) => set.setId !== response.set.setId)],
|
|
58013
|
+
nextCursor: current.nextCursor
|
|
58014
|
+
}));
|
|
57589
58015
|
return {
|
|
57590
58016
|
kind: "preview_ready",
|
|
57591
58017
|
preview: {
|
|
57592
|
-
setId: response.
|
|
58018
|
+
setId: response.set.setId,
|
|
57593
58019
|
styleGuideSummary: response.styleGuide.displaySummary,
|
|
57594
|
-
candidate: response.candidate,
|
|
57595
58020
|
assets
|
|
57596
58021
|
}
|
|
57597
58022
|
};
|
|
57598
58023
|
} catch (error) {
|
|
57599
58024
|
return {
|
|
57600
58025
|
kind: "failed",
|
|
57601
|
-
message: error
|
|
58026
|
+
message: getGeneratedIconSetErrorMessage(error)
|
|
57602
58027
|
};
|
|
57603
58028
|
}
|
|
57604
58029
|
}, [apiClient, siteId]);
|
|
57605
|
-
const applyGeneratedFeatureCardIconSet = useCallback(async (preview) => {
|
|
57606
|
-
if (typeof apiClient !== "function") return preview;
|
|
57607
|
-
if (!preview.candidate) return preview;
|
|
57608
|
-
const response = unwrapResponse(await apiClient({
|
|
57609
|
-
endpoint: "applyGeneratedIconSet",
|
|
57610
|
-
params: { siteId },
|
|
57611
|
-
body: { candidate: preview.candidate }
|
|
57612
|
-
}));
|
|
57613
|
-
const iconValuesByCardKey = new Map(response.assets.map((asset) => [asset.cardKey, asset.iconValue]));
|
|
57614
|
-
return {
|
|
57615
|
-
...preview,
|
|
57616
|
-
assets: preview.assets.map((asset) => {
|
|
57617
|
-
const iconValue = parseBlockIconValue(iconValuesByCardKey.get(asset.cardKey) ?? asset.iconValue);
|
|
57618
|
-
if (iconValue.kind !== "generated") throw new Error("Generated icon apply response included an invalid icon reference");
|
|
57619
|
-
return {
|
|
57620
|
-
...asset,
|
|
57621
|
-
iconValue
|
|
57622
|
-
};
|
|
57623
|
-
})
|
|
57624
|
-
};
|
|
57625
|
-
}, [apiClient, siteId]);
|
|
57626
58030
|
useEffect(() => {
|
|
57627
58031
|
return uiStore.subscribe(() => {
|
|
57628
58032
|
const structureList = uiStore.getState().structure.getList();
|
|
@@ -57797,133 +58201,139 @@ const BlockEditor = forwardRef(function BlockEditor({ siteId, owner, blocks, rec
|
|
|
57797
58201
|
uiStore
|
|
57798
58202
|
]);
|
|
57799
58203
|
const hasBlocks = blockList.length > 0;
|
|
57800
|
-
|
|
57801
|
-
|
|
57802
|
-
|
|
57803
|
-
|
|
57804
|
-
|
|
57805
|
-
|
|
57806
|
-
|
|
57807
|
-
|
|
57808
|
-
|
|
57809
|
-
|
|
57810
|
-
|
|
57811
|
-
|
|
57812
|
-
|
|
57813
|
-
|
|
57814
|
-
|
|
57815
|
-
|
|
57816
|
-
|
|
57817
|
-
|
|
57818
|
-
|
|
57819
|
-
|
|
57820
|
-
|
|
57821
|
-
|
|
57822
|
-
|
|
57823
|
-
|
|
57824
|
-
|
|
57825
|
-
|
|
57826
|
-
|
|
57827
|
-
|
|
57828
|
-
|
|
57829
|
-
|
|
57830
|
-
|
|
57831
|
-
|
|
57832
|
-
|
|
57833
|
-
|
|
57834
|
-
|
|
57835
|
-
|
|
57836
|
-
|
|
57837
|
-
|
|
57838
|
-
|
|
57839
|
-
|
|
57840
|
-
|
|
57841
|
-
|
|
57842
|
-
|
|
57843
|
-
|
|
57844
|
-
|
|
57845
|
-
|
|
57846
|
-
|
|
57847
|
-
|
|
57848
|
-
|
|
57849
|
-
|
|
57850
|
-
|
|
57851
|
-
|
|
57852
|
-
|
|
57853
|
-
|
|
57854
|
-
|
|
57855
|
-
block,
|
|
57856
|
-
onMove: handleMove,
|
|
57857
|
-
onDuplicate: duplicateBlock,
|
|
57858
|
-
onDelete: allowDeletion ? handleDelete : void 0,
|
|
57859
|
-
isFirst: index === 0,
|
|
57860
|
-
isLast: index === blockList.length - 1,
|
|
57861
|
-
isMoving: reorderId === block.id || duplicatingBlockId === block.id,
|
|
57862
|
-
isDraggable: allowReordering,
|
|
57863
|
-
collapsed,
|
|
57864
|
-
onCollapsedChange: (nextCollapsed) => {
|
|
58204
|
+
const contextValue = useMemo(() => ({
|
|
58205
|
+
blockList,
|
|
58206
|
+
setBlockList,
|
|
58207
|
+
reorderId,
|
|
58208
|
+
focusRequest,
|
|
58209
|
+
triggerFocus,
|
|
58210
|
+
handleMove,
|
|
58211
|
+
onDragEnd,
|
|
58212
|
+
activeBlockId,
|
|
58213
|
+
setActiveBlockId,
|
|
58214
|
+
theme
|
|
58215
|
+
}), [
|
|
58216
|
+
blockList,
|
|
58217
|
+
reorderId,
|
|
58218
|
+
focusRequest,
|
|
58219
|
+
triggerFocus,
|
|
58220
|
+
handleMove,
|
|
58221
|
+
onDragEnd,
|
|
58222
|
+
activeBlockId,
|
|
58223
|
+
setActiveBlockId,
|
|
58224
|
+
theme
|
|
58225
|
+
]);
|
|
58226
|
+
return /* @__PURE__ */ jsx(GeneratedIconLibraryProvider, {
|
|
58227
|
+
value: {
|
|
58228
|
+
...generatedIconLibrary,
|
|
58229
|
+
loadMore: generatedIconLibrary.nextCursor ? loadMoreGeneratedIcons : null
|
|
58230
|
+
},
|
|
58231
|
+
children: /* @__PURE__ */ jsx(BlockListProvider, {
|
|
58232
|
+
value: contextValue,
|
|
58233
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
58234
|
+
className: "space-y-3 touch-pan-y",
|
|
58235
|
+
children: [
|
|
58236
|
+
/* @__PURE__ */ jsx(HeaderActions, { headerLeftSlot }),
|
|
58237
|
+
errorMessage ? /* @__PURE__ */ jsx("div", {
|
|
58238
|
+
className: "rounded-md border border-destructive bg-destructive/10 px-4 py-2 text-sm text-destructive",
|
|
58239
|
+
children: errorMessage
|
|
58240
|
+
}) : null,
|
|
58241
|
+
hasBlocks ? /* @__PURE__ */ jsx(DndContext, {
|
|
58242
|
+
sensors: activeSensors,
|
|
58243
|
+
collisionDetection: closestCenter,
|
|
58244
|
+
onDragEnd,
|
|
58245
|
+
children: /* @__PURE__ */ jsx(SortableContext, {
|
|
58246
|
+
items: blockList.map((b) => b.id),
|
|
58247
|
+
strategy: verticalListSortingStrategy,
|
|
58248
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
58249
|
+
className: "space-y-0",
|
|
58250
|
+
children: [canCreateBlocks ? /* @__PURE__ */ jsx(AddBlockDivider, {
|
|
58251
|
+
onOpen: openPicker,
|
|
58252
|
+
position: 0
|
|
58253
|
+
}) : null, blockList.map((block, index) => {
|
|
58254
|
+
const focusSignal = focusRequest && block.id && focusRequest.blockId === unsafeAsEditorBlockId(block.id) ? focusRequest : null;
|
|
58255
|
+
const collapsed = isCollapsed(block.id);
|
|
58256
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
58257
|
+
className: "group",
|
|
58258
|
+
ref: (node) => {
|
|
57865
58259
|
if (!block.id) return;
|
|
57866
|
-
|
|
57867
|
-
|
|
57868
|
-
if (activeBlockId === unsafeAsEditorBlockId(block.id)) uiStore.getState().setActiveBlockId(null);
|
|
57869
|
-
return;
|
|
57870
|
-
}
|
|
57871
|
-
uiStore.getState().setActiveBlockId(unsafeAsEditorBlockId(block.id));
|
|
58260
|
+
if (node) blockRefs.current.set(block.id, node);
|
|
58261
|
+
else blockRefs.current.delete(block.id);
|
|
57872
58262
|
},
|
|
57873
|
-
|
|
57874
|
-
|
|
57875
|
-
|
|
57876
|
-
|
|
57877
|
-
|
|
57878
|
-
|
|
57879
|
-
|
|
57880
|
-
|
|
57881
|
-
|
|
57882
|
-
|
|
57883
|
-
|
|
57884
|
-
|
|
57885
|
-
|
|
57886
|
-
|
|
57887
|
-
|
|
57888
|
-
|
|
57889
|
-
|
|
57890
|
-
|
|
57891
|
-
|
|
57892
|
-
|
|
57893
|
-
|
|
57894
|
-
|
|
57895
|
-
|
|
57896
|
-
|
|
57897
|
-
|
|
58263
|
+
children: [/* @__PURE__ */ jsx(SortableBlockItem, {
|
|
58264
|
+
siteId,
|
|
58265
|
+
block,
|
|
58266
|
+
onMove: handleMove,
|
|
58267
|
+
onDuplicate: duplicateBlock,
|
|
58268
|
+
onDelete: allowDeletion ? handleDelete : void 0,
|
|
58269
|
+
isFirst: index === 0,
|
|
58270
|
+
isLast: index === blockList.length - 1,
|
|
58271
|
+
isMoving: reorderId === block.id || duplicatingBlockId === block.id,
|
|
58272
|
+
isDraggable: allowReordering,
|
|
58273
|
+
collapsed,
|
|
58274
|
+
onCollapsedChange: (nextCollapsed) => {
|
|
58275
|
+
if (!block.id) return;
|
|
58276
|
+
setCollapsed(block.id, nextCollapsed);
|
|
58277
|
+
if (nextCollapsed) {
|
|
58278
|
+
if (activeBlockId === unsafeAsEditorBlockId(block.id)) uiStore.getState().setActiveBlockId(null);
|
|
58279
|
+
return;
|
|
58280
|
+
}
|
|
58281
|
+
uiStore.getState().setActiveBlockId(unsafeAsEditorBlockId(block.id));
|
|
58282
|
+
},
|
|
58283
|
+
highlighted: highlightedBlockId === block.id,
|
|
58284
|
+
hasRecoveryConflict: typeof block.id === "string" && conflictedBlockIdSet.has(block.id),
|
|
58285
|
+
focusSignal,
|
|
58286
|
+
onFocusHandled: handleFocusHandled,
|
|
58287
|
+
onBlockSave,
|
|
58288
|
+
theme,
|
|
58289
|
+
widgetOverrides,
|
|
58290
|
+
uiStore,
|
|
58291
|
+
sdkConfig,
|
|
58292
|
+
customBlocks,
|
|
58293
|
+
hideThemeV2RawStyleFields,
|
|
58294
|
+
pageDesignBlock: block.id ? pageDesignBlockById.get(block.id) ?? null : null,
|
|
58295
|
+
reorderControlMode,
|
|
58296
|
+
actionPresentation,
|
|
58297
|
+
currentStyleGuideVersionId: iconStyleGuide?.versionId ?? null,
|
|
58298
|
+
iconStyleGuideSummary: iconStyleGuide?.summary ?? null,
|
|
58299
|
+
iconStyleGuideEditHref: iconStyleGuide?.editHref ?? null,
|
|
58300
|
+
onGenerateIconSet: generateFeatureCardIconSet
|
|
58301
|
+
}), canCreateBlocks && index < blockList.length - 1 ? /* @__PURE__ */ jsx(AddBlockDivider, {
|
|
58302
|
+
onOpen: openPicker,
|
|
58303
|
+
position: index + 1
|
|
58304
|
+
}) : null]
|
|
58305
|
+
}, block.id ?? index);
|
|
58306
|
+
})]
|
|
58307
|
+
})
|
|
57898
58308
|
})
|
|
57899
|
-
})
|
|
57900
|
-
|
|
57901
|
-
|
|
57902
|
-
|
|
57903
|
-
|
|
57904
|
-
|
|
57905
|
-
|
|
57906
|
-
|
|
57907
|
-
|
|
57908
|
-
|
|
57909
|
-
|
|
57910
|
-
|
|
57911
|
-
|
|
57912
|
-
|
|
57913
|
-
|
|
57914
|
-
})
|
|
57915
|
-
|
|
57916
|
-
|
|
57917
|
-
|
|
57918
|
-
|
|
57919
|
-
|
|
57920
|
-
|
|
57921
|
-
|
|
57922
|
-
|
|
57923
|
-
|
|
57924
|
-
|
|
57925
|
-
|
|
57926
|
-
|
|
58309
|
+
}) : hasBlocks ? /* @__PURE__ */ jsx("div", {
|
|
58310
|
+
className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground",
|
|
58311
|
+
children: "Loading block editor..."
|
|
58312
|
+
}) : canCreateBlocks ? /* @__PURE__ */ jsx(EmptyState, { onAdd: () => openPicker(0) }) : /* @__PURE__ */ jsx("div", {
|
|
58313
|
+
className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground",
|
|
58314
|
+
children: emptyUnavailableMessage
|
|
58315
|
+
}),
|
|
58316
|
+
canCreateBlocks && hasBlocks ? /* @__PURE__ */ jsx("div", {
|
|
58317
|
+
className: "flex justify-center",
|
|
58318
|
+
children: /* @__PURE__ */ jsxs(Button, {
|
|
58319
|
+
type: "button",
|
|
58320
|
+
variant: "secondary",
|
|
58321
|
+
onClick: () => openPicker(blockList.length),
|
|
58322
|
+
children: [/* @__PURE__ */ jsx(Plus, { className: "mr-2 h-4 w-4" }), "Add block"]
|
|
58323
|
+
})
|
|
58324
|
+
}) : null,
|
|
58325
|
+
canCreateBlocks ? /* @__PURE__ */ jsx(EnhancedBlockPickerDialog, {
|
|
58326
|
+
open: pickerOpen,
|
|
58327
|
+
onOpenChange: (open) => open ? openPicker(blockList.length) : closePicker(),
|
|
58328
|
+
creatingBlockName,
|
|
58329
|
+
descriptors: availableBlocks,
|
|
58330
|
+
siteId,
|
|
58331
|
+
existingBlockNames: blockList.map((b) => b.kind).filter(Boolean),
|
|
58332
|
+
enabledContentTypes: fetchedContentTypes,
|
|
58333
|
+
onSelect: (descriptor) => void handleCreateBlock(descriptor)
|
|
58334
|
+
}) : null
|
|
58335
|
+
]
|
|
58336
|
+
})
|
|
57927
58337
|
})
|
|
57928
58338
|
});
|
|
57929
58339
|
});
|
|
@@ -58731,9 +59141,11 @@ function RichTextField({ path, backend, config }) {
|
|
|
58731
59141
|
onPickImage,
|
|
58732
59142
|
linkItems,
|
|
58733
59143
|
onRequestLinkItems: loadLinkItems,
|
|
58734
|
-
|
|
58735
|
-
|
|
58736
|
-
|
|
59144
|
+
toolbarLayout: {
|
|
59145
|
+
kind: "inline",
|
|
59146
|
+
tone: "light",
|
|
59147
|
+
visibility: { kind: "always" }
|
|
59148
|
+
},
|
|
58737
59149
|
renderContent: (content) => theme ? /* @__PURE__ */ jsx(ThemeScope, {
|
|
58738
59150
|
theme,
|
|
58739
59151
|
children: /* @__PURE__ */ jsx("div", {
|
|
@@ -59361,45 +59773,169 @@ function EntryPickerField({ path, backend, config }) {
|
|
|
59361
59773
|
//#region ../editor-blocks/src/widgets/icon-picker/IconPickerField.tsx
|
|
59362
59774
|
function IconPickerField({ path, backend, config }) {
|
|
59363
59775
|
const { value, error, setValue } = useField(path, backend);
|
|
59776
|
+
const library = useGeneratedIconLibrary();
|
|
59777
|
+
const parsedValue = parseBlockIconValue(value);
|
|
59778
|
+
const [source, setSource] = useState(parsedValue.kind === "generated" ? "generated" : "symbols");
|
|
59779
|
+
const [generatedQuery, setGeneratedQuery] = useState("");
|
|
59364
59780
|
const configuredPreset = config.ui?.iconPickerPreset;
|
|
59365
59781
|
const preset = resolveIconPickerPreset(configuredPreset);
|
|
59366
59782
|
if (configuredPreset && !isIconPickerPreset(configuredPreset) && true) console.warn(`[IconPickerField] Unknown iconPickerPreset at "${path}". Falling back to "cta".`);
|
|
59367
59783
|
const options = getIconPickerOptionsForPreset(preset);
|
|
59368
|
-
const
|
|
59784
|
+
const selectedSemanticId = parsedValue.kind === "semantic" ? parsedValue.iconId : value;
|
|
59785
|
+
const selected = typeof selectedSemanticId === "string" && isKnownIconName(selectedSemanticId) && options.some((option) => option.id === selectedSemanticId) ? selectedSemanticId : void 0;
|
|
59786
|
+
const generatedAssets = library.sets.flatMap((set) => set.assets.map((asset) => ({
|
|
59787
|
+
asset,
|
|
59788
|
+
blockLabel: set.blockLabel
|
|
59789
|
+
})));
|
|
59790
|
+
const normalizedGeneratedQuery = generatedQuery.trim().toLowerCase();
|
|
59791
|
+
const visibleGeneratedAssets = normalizedGeneratedQuery.length === 0 ? generatedAssets : generatedAssets.filter(({ asset, blockLabel }) => [asset.subjectLabel, blockLabel].some((text) => text.toLowerCase().includes(normalizedGeneratedQuery)));
|
|
59792
|
+
const selectedGeneratedAsset = parsedValue.kind === "generated" ? generatedAssets.find(({ asset }) => asset.iconValue.kind === "generated" && asset.iconValue.assetId === parsedValue.assetId)?.asset : null;
|
|
59793
|
+
const selectedGeneratedAssetUnavailable = parsedValue.kind === "generated" && (selectedGeneratedAsset?.availability === "unavailable" || !selectedGeneratedAsset && library.kind === "ready" && library.nextCursor === null);
|
|
59369
59794
|
return /* @__PURE__ */ jsx(FieldFrame, {
|
|
59370
59795
|
label: config.label,
|
|
59371
59796
|
description: config.description,
|
|
59372
59797
|
error: error?.message,
|
|
59373
|
-
children: () => /* @__PURE__ */
|
|
59374
|
-
|
|
59375
|
-
|
|
59376
|
-
|
|
59377
|
-
|
|
59378
|
-
|
|
59379
|
-
|
|
59380
|
-
|
|
59381
|
-
|
|
59382
|
-
|
|
59383
|
-
|
|
59384
|
-
|
|
59385
|
-
|
|
59386
|
-
|
|
59387
|
-
|
|
59388
|
-
|
|
59389
|
-
|
|
59390
|
-
|
|
59391
|
-
|
|
59392
|
-
|
|
59393
|
-
|
|
59394
|
-
|
|
59395
|
-
|
|
59396
|
-
|
|
59397
|
-
|
|
59398
|
-
|
|
59399
|
-
|
|
59798
|
+
children: () => /* @__PURE__ */ jsxs("div", {
|
|
59799
|
+
className: "space-y-2",
|
|
59800
|
+
children: [
|
|
59801
|
+
parsedValue.kind === "generated" ? /* @__PURE__ */ jsxs("div", {
|
|
59802
|
+
className: `flex items-center gap-3 rounded-md border p-2 ${selectedGeneratedAssetUnavailable ? "border-destructive/40 bg-destructive/5" : "bg-muted/20"}`,
|
|
59803
|
+
children: [
|
|
59804
|
+
selectedGeneratedAsset?.availability === "available" ? /* @__PURE__ */ jsx("img", {
|
|
59805
|
+
src: selectedGeneratedAsset.renderAsset.src,
|
|
59806
|
+
alt: "",
|
|
59807
|
+
className: "size-10 object-contain"
|
|
59808
|
+
}) : null,
|
|
59809
|
+
/* @__PURE__ */ jsxs("span", {
|
|
59810
|
+
className: "min-w-0 flex-1 text-sm",
|
|
59811
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
59812
|
+
className: "block truncate font-medium",
|
|
59813
|
+
children: selectedGeneratedAssetUnavailable ? "Generated icon unavailable" : selectedGeneratedAsset?.subjectLabel ?? "Generated icon"
|
|
59814
|
+
}), selectedGeneratedAssetUnavailable ? /* @__PURE__ */ jsx("span", {
|
|
59815
|
+
className: "block text-xs text-muted-foreground",
|
|
59816
|
+
children: "The image file is missing or was deleted. Choose a replacement below or clear it."
|
|
59817
|
+
}) : null]
|
|
59818
|
+
}),
|
|
59819
|
+
/* @__PURE__ */ jsx(Button, {
|
|
59820
|
+
type: "button",
|
|
59821
|
+
size: "sm",
|
|
59822
|
+
variant: "ghost",
|
|
59823
|
+
onClick: () => setValue(null),
|
|
59824
|
+
children: "Clear"
|
|
59825
|
+
})
|
|
59826
|
+
]
|
|
59827
|
+
}) : null,
|
|
59828
|
+
/* @__PURE__ */ jsxs("div", {
|
|
59829
|
+
className: "grid grid-cols-2 rounded-md bg-muted p-1",
|
|
59830
|
+
"aria-label": "Icon source",
|
|
59831
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
59832
|
+
type: "button",
|
|
59833
|
+
size: "sm",
|
|
59834
|
+
variant: source === "generated" ? "secondary" : "ghost",
|
|
59835
|
+
onClick: () => setSource("generated"),
|
|
59836
|
+
children: "Generated"
|
|
59837
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
59838
|
+
type: "button",
|
|
59839
|
+
size: "sm",
|
|
59840
|
+
variant: source === "symbols" ? "secondary" : "ghost",
|
|
59841
|
+
onClick: () => setSource("symbols"),
|
|
59842
|
+
children: "Symbols"
|
|
59400
59843
|
})]
|
|
59401
|
-
})
|
|
59402
|
-
|
|
59844
|
+
}),
|
|
59845
|
+
source === "symbols" ? /* @__PURE__ */ jsx(Combobox, {
|
|
59846
|
+
items: options.map((opt) => ({
|
|
59847
|
+
id: opt.id,
|
|
59848
|
+
label: opt.label,
|
|
59849
|
+
searchText: opt.searchText,
|
|
59850
|
+
item: opt
|
|
59851
|
+
})),
|
|
59852
|
+
value: selected,
|
|
59853
|
+
onSelect: (entry) => {
|
|
59854
|
+
if (!entry) {
|
|
59855
|
+
setValue(null);
|
|
59856
|
+
return;
|
|
59857
|
+
}
|
|
59858
|
+
setValue(entry.id);
|
|
59859
|
+
},
|
|
59860
|
+
placeholder: "Select icon…",
|
|
59861
|
+
clearLabel: "Clear",
|
|
59862
|
+
renderItem: (entry) => {
|
|
59863
|
+
const Icon = getIconComponent(entry.id);
|
|
59864
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
59865
|
+
className: "flex items-center gap-2",
|
|
59866
|
+
children: [Icon ? /* @__PURE__ */ jsx(Icon, {
|
|
59867
|
+
className: "h-4 w-4 shrink-0",
|
|
59868
|
+
"aria-hidden": "true"
|
|
59869
|
+
}) : null, /* @__PURE__ */ jsx("span", {
|
|
59870
|
+
className: "truncate",
|
|
59871
|
+
children: entry.label
|
|
59872
|
+
})]
|
|
59873
|
+
});
|
|
59874
|
+
}
|
|
59875
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
59876
|
+
className: "space-y-2 rounded-md border p-2",
|
|
59877
|
+
children: [
|
|
59878
|
+
/* @__PURE__ */ jsx("label", {
|
|
59879
|
+
className: "sr-only",
|
|
59880
|
+
htmlFor: `${path}-generated-icon-search`,
|
|
59881
|
+
children: "Search generated icons"
|
|
59882
|
+
}),
|
|
59883
|
+
/* @__PURE__ */ jsx("input", {
|
|
59884
|
+
id: `${path}-generated-icon-search`,
|
|
59885
|
+
type: "search",
|
|
59886
|
+
value: generatedQuery,
|
|
59887
|
+
onChange: (event) => setGeneratedQuery(event.currentTarget.value),
|
|
59888
|
+
placeholder: "Search generated icons…",
|
|
59889
|
+
className: "h-9 w-full rounded-md border bg-background px-3 text-sm"
|
|
59890
|
+
}),
|
|
59891
|
+
/* @__PURE__ */ jsx("div", {
|
|
59892
|
+
className: "max-h-56 overflow-y-auto",
|
|
59893
|
+
children: library.kind === "loading" ? /* @__PURE__ */ jsx("p", {
|
|
59894
|
+
className: "py-6 text-center text-sm text-muted-foreground",
|
|
59895
|
+
children: "Loading generated icons…"
|
|
59896
|
+
}) : library.kind === "failed" && library.sets.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
59897
|
+
role: "alert",
|
|
59898
|
+
className: "py-6 text-center text-sm text-destructive",
|
|
59899
|
+
children: library.message
|
|
59900
|
+
}) : generatedAssets.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
59901
|
+
className: "py-6 text-center text-sm text-muted-foreground",
|
|
59902
|
+
children: "Generated icons will appear here after you make a set."
|
|
59903
|
+
}) : visibleGeneratedAssets.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
59904
|
+
className: "py-6 text-center text-sm text-muted-foreground",
|
|
59905
|
+
children: "No generated icons match that search."
|
|
59906
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
59907
|
+
className: "grid grid-cols-4 gap-2",
|
|
59908
|
+
children: visibleGeneratedAssets.map(({ asset }) => {
|
|
59909
|
+
const iconValue = parseBlockIconValue(asset.iconValue);
|
|
59910
|
+
if (iconValue.kind !== "generated" || asset.availability !== "available") return null;
|
|
59911
|
+
const isSelected = parsedValue.kind === "generated" && parsedValue.assetId === iconValue.assetId;
|
|
59912
|
+
return /* @__PURE__ */ jsx("button", {
|
|
59913
|
+
type: "button",
|
|
59914
|
+
className: `flex aspect-square items-center justify-center rounded-md border p-1 transition-colors hover:bg-muted ${isSelected ? "border-primary ring-1 ring-primary" : ""}`,
|
|
59915
|
+
"aria-label": `Use ${asset.subjectLabel}`,
|
|
59916
|
+
"aria-pressed": isSelected,
|
|
59917
|
+
onClick: () => setValue(iconValue),
|
|
59918
|
+
children: /* @__PURE__ */ jsx("img", {
|
|
59919
|
+
src: asset.renderAsset.src,
|
|
59920
|
+
alt: "",
|
|
59921
|
+
className: "size-full object-contain"
|
|
59922
|
+
})
|
|
59923
|
+
}, `${iconValue.setId}:${iconValue.assetId}`);
|
|
59924
|
+
})
|
|
59925
|
+
})
|
|
59926
|
+
}),
|
|
59927
|
+
library.loadMore ? /* @__PURE__ */ jsx(Button, {
|
|
59928
|
+
type: "button",
|
|
59929
|
+
size: "sm",
|
|
59930
|
+
variant: "outline",
|
|
59931
|
+
className: "w-full",
|
|
59932
|
+
disabled: library.kind === "loading_more",
|
|
59933
|
+
onClick: library.loadMore,
|
|
59934
|
+
children: library.kind === "loading_more" ? "Loading more…" : "Load more icons"
|
|
59935
|
+
}) : null
|
|
59936
|
+
]
|
|
59937
|
+
})
|
|
59938
|
+
]
|
|
59403
59939
|
})
|
|
59404
59940
|
});
|
|
59405
59941
|
}
|
|
@@ -64315,10 +64851,84 @@ function ColorTokenButton({ token, label, swatchColor, selected, disabled, onCli
|
|
|
64315
64851
|
});
|
|
64316
64852
|
}
|
|
64317
64853
|
//#endregion
|
|
64854
|
+
//#region ../preview-next/src/client/preview/CustomizeBackgroundControlRows.tsx
|
|
64855
|
+
function CustomizeBackgroundControlRows({ modeLabel, valueLabel, valueAriaLabel, swatch, chooserOpen, chooser, canCycleMode, canCycleValue, onCycleMode, onCycleValue, onToggleChooser }) {
|
|
64856
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
64857
|
+
className: "space-y-2",
|
|
64858
|
+
children: [
|
|
64859
|
+
/* @__PURE__ */ jsxs("div", {
|
|
64860
|
+
className: "flex items-stretch overflow-hidden rounded-full border bg-background",
|
|
64861
|
+
children: [
|
|
64862
|
+
/* @__PURE__ */ jsx("button", {
|
|
64863
|
+
type: "button",
|
|
64864
|
+
onClick: (event) => onCycleMode("prev", event),
|
|
64865
|
+
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
64866
|
+
"aria-label": "Previous background mode",
|
|
64867
|
+
disabled: !canCycleMode,
|
|
64868
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { size: 14 })
|
|
64869
|
+
}),
|
|
64870
|
+
/* @__PURE__ */ jsxs("div", {
|
|
64871
|
+
className: "min-w-0 flex-1 border-x px-2 py-1 text-center",
|
|
64872
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
64873
|
+
className: "text-xs font-medium leading-3 text-muted-foreground",
|
|
64874
|
+
children: "Background:"
|
|
64875
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
64876
|
+
className: "truncate text-xs font-semibold leading-4",
|
|
64877
|
+
children: modeLabel
|
|
64878
|
+
})]
|
|
64879
|
+
}),
|
|
64880
|
+
/* @__PURE__ */ jsx("button", {
|
|
64881
|
+
type: "button",
|
|
64882
|
+
onClick: (event) => onCycleMode("next", event),
|
|
64883
|
+
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
64884
|
+
"aria-label": "Next background mode",
|
|
64885
|
+
disabled: !canCycleMode,
|
|
64886
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { size: 14 })
|
|
64887
|
+
})
|
|
64888
|
+
]
|
|
64889
|
+
}),
|
|
64890
|
+
/* @__PURE__ */ jsxs("div", {
|
|
64891
|
+
className: "flex items-stretch overflow-hidden rounded-full border bg-background",
|
|
64892
|
+
children: [
|
|
64893
|
+
/* @__PURE__ */ jsx("button", {
|
|
64894
|
+
type: "button",
|
|
64895
|
+
onClick: (event) => onCycleValue("prev", event),
|
|
64896
|
+
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
64897
|
+
"aria-label": "Previous background value",
|
|
64898
|
+
disabled: !canCycleValue,
|
|
64899
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { size: 14 })
|
|
64900
|
+
}),
|
|
64901
|
+
/* @__PURE__ */ jsxs("button", {
|
|
64902
|
+
type: "button",
|
|
64903
|
+
className: "flex min-w-0 flex-1 items-center justify-center gap-2 border-x px-2 py-1 text-center hover:bg-muted",
|
|
64904
|
+
"aria-expanded": chooserOpen,
|
|
64905
|
+
"aria-label": valueAriaLabel,
|
|
64906
|
+
onClick: onToggleChooser,
|
|
64907
|
+
children: [swatch, /* @__PURE__ */ jsx("span", {
|
|
64908
|
+
className: "truncate text-xs font-medium",
|
|
64909
|
+
children: valueLabel
|
|
64910
|
+
})]
|
|
64911
|
+
}),
|
|
64912
|
+
/* @__PURE__ */ jsx("button", {
|
|
64913
|
+
type: "button",
|
|
64914
|
+
onClick: (event) => onCycleValue("next", event),
|
|
64915
|
+
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
64916
|
+
"aria-label": "Next background value",
|
|
64917
|
+
disabled: !canCycleValue,
|
|
64918
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { size: 14 })
|
|
64919
|
+
})
|
|
64920
|
+
]
|
|
64921
|
+
}),
|
|
64922
|
+
chooserOpen ? chooser : null
|
|
64923
|
+
]
|
|
64924
|
+
});
|
|
64925
|
+
}
|
|
64926
|
+
//#endregion
|
|
64318
64927
|
//#region ../preview-next/src/client/preview/SiteChromeCustomizeButton.tsx
|
|
64319
64928
|
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" }) {
|
|
64320
64929
|
const customize = useSiteChromeCustomizeOptional();
|
|
64321
64930
|
const popover = useCustomizePopoverController();
|
|
64931
|
+
const [backgroundChooserOpen, setBackgroundChooserOpen] = useState(false);
|
|
64322
64932
|
const popoverSide = useSiteChromeCustomizePopoverSide({
|
|
64323
64933
|
open: popover.open,
|
|
64324
64934
|
surface,
|
|
@@ -64338,52 +64948,39 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
|
|
|
64338
64948
|
}, [surfaceState]);
|
|
64339
64949
|
const controlPlan = useMemo(() => {
|
|
64340
64950
|
if (surfaceState.kind !== "available" || !background) return { cycleRows: [] };
|
|
64341
|
-
return { cycleRows: [
|
|
64342
|
-
|
|
64343
|
-
|
|
64344
|
-
|
|
64345
|
-
|
|
64346
|
-
|
|
64347
|
-
|
|
64348
|
-
|
|
64349
|
-
|
|
64350
|
-
|
|
64351
|
-
|
|
64352
|
-
|
|
64353
|
-
|
|
64354
|
-
|
|
64355
|
-
|
|
64356
|
-
|
|
64357
|
-
|
|
64358
|
-
|
|
64359
|
-
|
|
64360
|
-
|
|
64361
|
-
|
|
64362
|
-
|
|
64363
|
-
|
|
64364
|
-
onNext: () => customize?.cycleSurfaceLook(surface, "next")
|
|
64365
|
-
},
|
|
64366
|
-
...background.available ? [{
|
|
64367
|
-
label: "Background",
|
|
64368
|
-
valueLabel: background.currentLabel,
|
|
64369
|
-
previousLabel: `Previous ${surface} background`,
|
|
64370
|
-
nextLabel: `Next ${surface} background`,
|
|
64371
|
-
availability: cycleAvailabilityFromFlags({
|
|
64372
|
-
canCycle: background.quickTokens.length > 0,
|
|
64373
|
-
applyAllowed: surfaceState.applyAllowed
|
|
64374
|
-
}),
|
|
64375
|
-
onPrevious: () => customize?.cycleSurfaceBackground(surface, "prev"),
|
|
64376
|
-
onNext: () => customize?.cycleSurfaceBackground(surface, "next")
|
|
64377
|
-
}] : []
|
|
64378
|
-
] };
|
|
64951
|
+
return { cycleRows: [...surfaceState.surface === "header" || surfaceState.surface === "footer" ? [{
|
|
64952
|
+
label: "Layout",
|
|
64953
|
+
valueLabel: surfaceState.currentLayoutLabel,
|
|
64954
|
+
previousLabel: `Previous ${surface} Layout`,
|
|
64955
|
+
nextLabel: `Next ${surface} Layout`,
|
|
64956
|
+
availability: cycleAvailabilityFromFlags({
|
|
64957
|
+
canCycle: cycleableLayoutOptionCount > 1,
|
|
64958
|
+
applyAllowed: surfaceState.applyAllowed
|
|
64959
|
+
}),
|
|
64960
|
+
onPrevious: () => customize?.cycleSurfaceLayout(surface, "prev"),
|
|
64961
|
+
onNext: () => customize?.cycleSurfaceLayout(surface, "next")
|
|
64962
|
+
}] : [], {
|
|
64963
|
+
label: "Look",
|
|
64964
|
+
valueLabel: surfaceState.currentLabel,
|
|
64965
|
+
previousLabel: `Previous ${surface} Look`,
|
|
64966
|
+
nextLabel: `Next ${surface} Look`,
|
|
64967
|
+
availability: cycleAvailabilityFromFlags({
|
|
64968
|
+
canCycle: cycleableOptionCount > 1,
|
|
64969
|
+
applyAllowed: surfaceState.applyAllowed
|
|
64970
|
+
}),
|
|
64971
|
+
onPrevious: () => customize?.cycleSurfaceLook(surface, "prev"),
|
|
64972
|
+
onNext: () => customize?.cycleSurfaceLook(surface, "next")
|
|
64973
|
+
}] };
|
|
64379
64974
|
}, [
|
|
64380
|
-
background,
|
|
64381
64975
|
customize,
|
|
64382
64976
|
cycleableLayoutOptionCount,
|
|
64383
64977
|
cycleableOptionCount,
|
|
64384
64978
|
surface,
|
|
64385
64979
|
surfaceState
|
|
64386
64980
|
]);
|
|
64981
|
+
useEffect(() => {
|
|
64982
|
+
if (!popover.open) setBackgroundChooserOpen(false);
|
|
64983
|
+
}, [popover.open]);
|
|
64387
64984
|
return /* @__PURE__ */ jsxs(PreviewChromeFloatingControl, {
|
|
64388
64985
|
anchorSelector: "[data-preview-site-chrome-surface]",
|
|
64389
64986
|
anchorTargetSelector: surface === "header" ? SITE_CHROME_VISIBLE_HEADER_SELECTOR : void 0,
|
|
@@ -64413,9 +65010,29 @@ function SiteChromeCustomizeButton({ surface, containerClassName = "pointer-even
|
|
|
64413
65010
|
side: popoverSide,
|
|
64414
65011
|
children: [
|
|
64415
65012
|
controlPlan.cycleRows.map((row) => /* @__PURE__ */ jsx(CustomizeCycleRow, { ...row }, row.label)),
|
|
64416
|
-
background?.available ? /* @__PURE__ */ jsx(
|
|
65013
|
+
background?.available ? /* @__PURE__ */ jsx(SiteChromeBackgroundControl, {
|
|
64417
65014
|
background,
|
|
64418
65015
|
applyAllowed: surfaceState.applyAllowed,
|
|
65016
|
+
chooserOpen: backgroundChooserOpen,
|
|
65017
|
+
onToggleChooser: (event) => {
|
|
65018
|
+
event.preventDefault();
|
|
65019
|
+
event.stopPropagation();
|
|
65020
|
+
setBackgroundChooserOpen((open) => !open);
|
|
65021
|
+
},
|
|
65022
|
+
onCycleMode: (direction, event) => {
|
|
65023
|
+
event.preventDefault();
|
|
65024
|
+
event.stopPropagation();
|
|
65025
|
+
chooseSiteChromeBackgroundMode({
|
|
65026
|
+
background,
|
|
65027
|
+
direction,
|
|
65028
|
+
onChoose: (override) => customize?.chooseSurfaceBackground(surfaceState.surface, override)
|
|
65029
|
+
});
|
|
65030
|
+
},
|
|
65031
|
+
onCycleValue: (direction, event) => {
|
|
65032
|
+
event.preventDefault();
|
|
65033
|
+
event.stopPropagation();
|
|
65034
|
+
customize?.cycleSurfaceBackground(surfaceState.surface, direction);
|
|
65035
|
+
},
|
|
64419
65036
|
onChoose: (override) => customize?.chooseSurfaceBackground(surfaceState.surface, override)
|
|
64420
65037
|
}) : null,
|
|
64421
65038
|
surfaceState.surface === "header" ? /* @__PURE__ */ jsxs("div", {
|
|
@@ -64550,34 +65167,75 @@ function chooseSiteChromeCustomizePopoverSide(input) {
|
|
|
64550
65167
|
if (measuredPanelHeight <= availableBelow) return "below";
|
|
64551
65168
|
return availableAbove > availableBelow ? "above" : "below";
|
|
64552
65169
|
}
|
|
64553
|
-
function
|
|
65170
|
+
function SiteChromeBackgroundControl({ background, applyAllowed, chooserOpen, onToggleChooser, onCycleMode, onCycleValue, onChoose }) {
|
|
64554
65171
|
const choose = (override) => (event) => {
|
|
64555
65172
|
event.preventDefault();
|
|
64556
65173
|
event.stopPropagation();
|
|
64557
65174
|
onChoose(override);
|
|
64558
65175
|
};
|
|
65176
|
+
const canCycleMode = applyAllowed && (background.current.kind === "color" || background.quickTokens.length > 0);
|
|
65177
|
+
const canCycleValue = applyAllowed && background.current.kind === "color" && background.quickTokens.length > 1;
|
|
64559
65178
|
return /* @__PURE__ */ jsx("div", {
|
|
64560
65179
|
className: "border-t pt-3",
|
|
64561
|
-
children: /* @__PURE__ */ jsx(
|
|
64562
|
-
|
|
64563
|
-
|
|
64564
|
-
|
|
64565
|
-
|
|
64566
|
-
|
|
64567
|
-
|
|
64568
|
-
|
|
64569
|
-
|
|
64570
|
-
|
|
64571
|
-
|
|
64572
|
-
|
|
64573
|
-
|
|
64574
|
-
|
|
64575
|
-
|
|
64576
|
-
|
|
64577
|
-
|
|
65180
|
+
children: /* @__PURE__ */ jsx(CustomizeBackgroundControlRows, {
|
|
65181
|
+
modeLabel: siteChromeBackgroundModeLabel(background.current),
|
|
65182
|
+
valueLabel: background.currentLabel,
|
|
65183
|
+
valueAriaLabel: `Choose background ${background.currentLabel.toLowerCase()}`,
|
|
65184
|
+
swatch: /* @__PURE__ */ jsx(SiteChromeBackgroundSwatch, { override: background.current }),
|
|
65185
|
+
chooserOpen,
|
|
65186
|
+
canCycleMode,
|
|
65187
|
+
canCycleValue,
|
|
65188
|
+
onCycleMode,
|
|
65189
|
+
onCycleValue,
|
|
65190
|
+
onToggleChooser,
|
|
65191
|
+
chooser: /* @__PURE__ */ jsx("div", {
|
|
65192
|
+
className: "mt-2 max-h-80 overflow-y-auto rounded-md border bg-muted/20 p-2",
|
|
65193
|
+
children: /* @__PURE__ */ jsx(CustomizeBackgroundColorPicker, {
|
|
65194
|
+
title: "Colors",
|
|
65195
|
+
defaultSelected: background.current.kind === "default",
|
|
65196
|
+
onChooseDefault: choose({ kind: "default" }),
|
|
65197
|
+
selectedToken: background.current.kind === "color" ? background.current.token : null,
|
|
65198
|
+
recommendedTokens: background.quickTokens,
|
|
65199
|
+
advancedTokens: background.advancedTokens,
|
|
65200
|
+
disabled: !applyAllowed,
|
|
65201
|
+
labelForToken: formatSiteChromeBackgroundTokenLabel,
|
|
65202
|
+
swatchColorForToken: tokenSwatchCss$1,
|
|
65203
|
+
onChooseToken: (token, event) => {
|
|
65204
|
+
choose({
|
|
65205
|
+
kind: "color",
|
|
65206
|
+
token
|
|
65207
|
+
})(event);
|
|
65208
|
+
}
|
|
65209
|
+
})
|
|
65210
|
+
})
|
|
64578
65211
|
})
|
|
64579
65212
|
});
|
|
64580
65213
|
}
|
|
65214
|
+
function chooseSiteChromeBackgroundMode({ background, direction, onChoose }) {
|
|
65215
|
+
if (background.current.kind === "color") {
|
|
65216
|
+
onChoose({ kind: "default" });
|
|
65217
|
+
return;
|
|
65218
|
+
}
|
|
65219
|
+
const token = direction === "next" ? background.quickTokens[0] : background.quickTokens[background.quickTokens.length - 1];
|
|
65220
|
+
if (token) onChoose({
|
|
65221
|
+
kind: "color",
|
|
65222
|
+
token
|
|
65223
|
+
});
|
|
65224
|
+
}
|
|
65225
|
+
function siteChromeBackgroundModeLabel(override) {
|
|
65226
|
+
return override.kind === "default" ? "Default" : "Color";
|
|
65227
|
+
}
|
|
65228
|
+
function SiteChromeBackgroundSwatch({ override }) {
|
|
65229
|
+
const baseClassName = "grid h-6 w-9 shrink-0 place-items-center overflow-hidden rounded-md border";
|
|
65230
|
+
if (override.kind === "default") return /* @__PURE__ */ jsx("span", {
|
|
65231
|
+
className: `${baseClassName} bg-background`,
|
|
65232
|
+
children: /* @__PURE__ */ jsx("span", { className: "h-3 w-3 rounded-full border bg-muted" })
|
|
65233
|
+
});
|
|
65234
|
+
return /* @__PURE__ */ jsx("span", {
|
|
65235
|
+
className: baseClassName,
|
|
65236
|
+
style: { backgroundColor: tokenSwatchCss$1(override.token) }
|
|
65237
|
+
});
|
|
65238
|
+
}
|
|
64581
65239
|
function tokenSwatchCss$1(token) {
|
|
64582
65240
|
return `rgb(var(--tb-${token}))`;
|
|
64583
65241
|
}
|
|
@@ -64847,17 +65505,17 @@ function LinkedEntryEditEventBridge() {
|
|
|
64847
65505
|
//#region ../preview-next/src/client/preview/PreviewShellLayout.tsx
|
|
64848
65506
|
const previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
|
|
64849
65507
|
const PreviewEditorSidebar = React.lazy(async () => {
|
|
64850
|
-
return { default: (await import("./PreviewEditorSidebar-
|
|
65508
|
+
return { default: (await import("./PreviewEditorSidebar-CmaPXdKu.mjs")).PreviewEditorSidebar };
|
|
64851
65509
|
});
|
|
64852
65510
|
const PreviewEditorUI = React.lazy(async () => {
|
|
64853
|
-
return { default: (await import("./PreviewEditorUI-
|
|
65511
|
+
return { default: (await import("./PreviewEditorUI-C5xRTh2b.mjs")).PreviewEditorUI };
|
|
64854
65512
|
});
|
|
64855
65513
|
const previewPaneContainmentStyle = {
|
|
64856
65514
|
contain: "layout paint",
|
|
64857
65515
|
isolation: "isolate",
|
|
64858
65516
|
transform: "translateZ(0)"
|
|
64859
65517
|
};
|
|
64860
|
-
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, themeSelectionPaletteVariantId = null, themeSelectionPaletteOverrides = null, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionTypographyPresetId = null, themeSelectionTypographyBodyFontOverride = null, themeSelectionTypographyHeadingFontOverride = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, themeSelectionFooterContext, supabaseUrl, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, themeRuntime = defaultPreviewThemeRuntime, siteStyleAccess = { kind: "hidden" } }) {
|
|
65518
|
+
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 = null, themeSelectionPaletteVariantId = null, themeSelectionPaletteOverrides = null, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionTypographyPresetId = null, themeSelectionTypographyBodyFontOverride = null, themeSelectionTypographyHeadingFontOverride = null, themeSelectionHeaderLookId = null, themeSelectionFooterLookId = null, themeSelectionHeaderContext, themeSelectionFooterContext, supabaseUrl, isSiteLaunched, maintenanceModeEnabled, entrySubrouteContext, assistantPanel, sdkConfig, mediaAssets, bookingOfferingPresets, themeRuntime = defaultPreviewThemeRuntime, siteStyleAccess = { kind: "hidden" } }) {
|
|
64861
65519
|
const layout = useOptionalPreviewLayout();
|
|
64862
65520
|
const headerNode = layout?.headerNode ?? null;
|
|
64863
65521
|
const bannerNode = layout?.bannerNode ?? null;
|
|
@@ -65047,6 +65705,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
|
|
|
65047
65705
|
themeSelectionVersion,
|
|
65048
65706
|
themeSelectionUpdatedAt,
|
|
65049
65707
|
themeSelectionButtonPersonalityId,
|
|
65708
|
+
runtimePaletteState,
|
|
65050
65709
|
themeSelectionPaletteVariantId,
|
|
65051
65710
|
themeSelectionPaletteOverrides,
|
|
65052
65711
|
themeSelectionHeaderLayoutId,
|
|
@@ -65106,6 +65765,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
|
|
|
65106
65765
|
selectionVersion: themeSelectionVersion,
|
|
65107
65766
|
selectionUpdatedAt: themeSelectionUpdatedAt,
|
|
65108
65767
|
buttonPersonalityId: themeSelectionButtonPersonalityId,
|
|
65768
|
+
runtimePaletteState,
|
|
65109
65769
|
paletteVariantId: themeSelectionPaletteVariantId,
|
|
65110
65770
|
paletteOverrides: themeSelectionPaletteOverrides,
|
|
65111
65771
|
headerLayoutId: themeSelectionHeaderLayoutId,
|
|
@@ -65148,7 +65808,7 @@ function PreviewShellLayout({ children, theme, surfaceId, siteId, dashboardBaseU
|
|
|
65148
65808
|
}
|
|
65149
65809
|
//#endregion
|
|
65150
65810
|
//#region ../preview-next/src/client/preview/PreviewShell.tsx
|
|
65151
|
-
function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug, editableId, previewSession, previewToken, dashboardBaseUrl = null, surfaceId, theme, themeId = null, themeSelectionId = null, themeSelectionVersion = null, themeSelectionUpdatedAt = null, themeSelectionButtonPersonalityId = null, themeSelectionPaletteVariantId = null, themeSelectionPaletteOverrides = null, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionTypographyPresetId = null, themeSelectionTypographyBodyFontOverride = null, themeSelectionTypographyHeadingFontOverride = 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, baseFetch }) {
|
|
65811
|
+
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 = null, themeSelectionPaletteVariantId = null, themeSelectionPaletteOverrides = null, themeSelectionHeaderLayoutId = null, themeSelectionHeaderStyleId = null, themeSelectionTypographyPresetId = null, themeSelectionTypographyBodyFontOverride = null, themeSelectionTypographyHeadingFontOverride = 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, baseFetch }) {
|
|
65152
65812
|
const apiClient = useMemo(() => createBearerAPIClient(previewToken, apiBaseUrl), [previewToken, apiBaseUrl]);
|
|
65153
65813
|
const resolvedDesignEditorEligibility = designEditorEligibility ?? defaultDesignEditorEligibility({
|
|
65154
65814
|
pageId,
|
|
@@ -65206,6 +65866,7 @@ function PreviewShell({ children, apiBaseUrl, blockApiConfig, siteId, siteSlug,
|
|
|
65206
65866
|
themeSelectionVersion,
|
|
65207
65867
|
themeSelectionUpdatedAt,
|
|
65208
65868
|
themeSelectionButtonPersonalityId,
|
|
65869
|
+
runtimePaletteState,
|
|
65209
65870
|
themeSelectionPaletteVariantId,
|
|
65210
65871
|
themeSelectionPaletteOverrides,
|
|
65211
65872
|
themeSelectionHeaderLayoutId,
|
|
@@ -66267,99 +66928,37 @@ function renderBlockCustomizeBuiltinRow(row, context) {
|
|
|
66267
66928
|
}, "look");
|
|
66268
66929
|
case "background":
|
|
66269
66930
|
if (context.currentBackground.kind !== "supported" || !context.backgroundCapability) return null;
|
|
66270
|
-
return /* @__PURE__ */
|
|
66271
|
-
|
|
66272
|
-
|
|
66273
|
-
|
|
66274
|
-
|
|
66275
|
-
|
|
66276
|
-
|
|
66277
|
-
|
|
66278
|
-
|
|
66279
|
-
|
|
66280
|
-
|
|
66281
|
-
|
|
66282
|
-
|
|
66283
|
-
|
|
66284
|
-
|
|
66285
|
-
|
|
66286
|
-
|
|
66287
|
-
|
|
66288
|
-
|
|
66289
|
-
|
|
66290
|
-
|
|
66291
|
-
|
|
66292
|
-
|
|
66293
|
-
|
|
66294
|
-
|
|
66295
|
-
|
|
66296
|
-
|
|
66297
|
-
|
|
66298
|
-
|
|
66299
|
-
|
|
66300
|
-
|
|
66301
|
-
direction: "next"
|
|
66302
|
-
}),
|
|
66303
|
-
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
66304
|
-
"aria-label": "Next background mode",
|
|
66305
|
-
disabled: !context.canCycleBackgroundMode,
|
|
66306
|
-
children: /* @__PURE__ */ jsx(ChevronRight, { size: 14 })
|
|
66307
|
-
})
|
|
66308
|
-
]
|
|
66309
|
-
}),
|
|
66310
|
-
/* @__PURE__ */ jsxs("div", {
|
|
66311
|
-
className: "flex items-stretch overflow-hidden rounded-full border bg-background",
|
|
66312
|
-
children: [
|
|
66313
|
-
/* @__PURE__ */ jsx("button", {
|
|
66314
|
-
type: "button",
|
|
66315
|
-
onClick: context.handleBackgroundCycle({
|
|
66316
|
-
kind: "cycle-value",
|
|
66317
|
-
direction: "prev"
|
|
66318
|
-
}),
|
|
66319
|
-
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
66320
|
-
"aria-label": "Previous background value",
|
|
66321
|
-
disabled: !context.canCycleBackgroundValue,
|
|
66322
|
-
children: /* @__PURE__ */ jsx(ChevronLeft, { size: 14 })
|
|
66323
|
-
}),
|
|
66324
|
-
/* @__PURE__ */ jsxs("button", {
|
|
66325
|
-
type: "button",
|
|
66326
|
-
className: "flex min-w-0 flex-1 items-center justify-center gap-2 border-x px-2 py-1 text-center hover:bg-muted",
|
|
66327
|
-
"aria-expanded": context.backgroundChooserOpen,
|
|
66328
|
-
"aria-label": `Choose background ${backgroundOverrideLabel(context.currentBackground.override).toLowerCase()}`,
|
|
66329
|
-
onClick: (event) => {
|
|
66330
|
-
event.preventDefault();
|
|
66331
|
-
event.stopPropagation();
|
|
66332
|
-
context.onToggleBackgroundChooser();
|
|
66333
|
-
},
|
|
66334
|
-
children: [/* @__PURE__ */ jsx(BackgroundPreviewSwatch, {
|
|
66335
|
-
override: context.currentBackground.override,
|
|
66336
|
-
imagePool: context.mergedBackgroundImagePool
|
|
66337
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
66338
|
-
className: "truncate text-xs font-medium",
|
|
66339
|
-
children: backgroundOverrideValueLabel(context.currentBackground.override, context.mergedBackgroundImagePool)
|
|
66340
|
-
})]
|
|
66341
|
-
}),
|
|
66342
|
-
/* @__PURE__ */ jsx("button", {
|
|
66343
|
-
type: "button",
|
|
66344
|
-
onClick: context.handleBackgroundCycle({
|
|
66345
|
-
kind: "cycle-value",
|
|
66346
|
-
direction: "next"
|
|
66347
|
-
}),
|
|
66348
|
-
className: "grid h-8 w-8 place-items-center hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",
|
|
66349
|
-
"aria-label": "Next background value",
|
|
66350
|
-
disabled: !context.canCycleBackgroundValue,
|
|
66351
|
-
children: /* @__PURE__ */ jsx(ChevronRight, { size: 14 })
|
|
66352
|
-
})
|
|
66353
|
-
]
|
|
66354
|
-
}),
|
|
66355
|
-
context.backgroundChooserOpen ? /* @__PURE__ */ jsx(BackgroundChooser, {
|
|
66356
|
-
capability: context.backgroundCapability,
|
|
66357
|
-
current: context.currentBackground.override,
|
|
66358
|
-
imagePoolStatus: context.imagePoolStatus,
|
|
66359
|
-
onChoose: context.onChooseBackgroundOverride
|
|
66360
|
-
}) : null
|
|
66361
|
-
]
|
|
66362
|
-
}, "background");
|
|
66931
|
+
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(CustomizeBackgroundControlRows, {
|
|
66932
|
+
modeLabel: backgroundModeLabel(context.currentBackground.override.kind),
|
|
66933
|
+
valueLabel: backgroundOverrideValueLabel(context.currentBackground.override, context.mergedBackgroundImagePool),
|
|
66934
|
+
valueAriaLabel: `Choose background ${backgroundOverrideLabel(context.currentBackground.override).toLowerCase()}`,
|
|
66935
|
+
swatch: /* @__PURE__ */ jsx(BackgroundPreviewSwatch, {
|
|
66936
|
+
override: context.currentBackground.override,
|
|
66937
|
+
imagePool: context.mergedBackgroundImagePool
|
|
66938
|
+
}),
|
|
66939
|
+
chooserOpen: context.backgroundChooserOpen,
|
|
66940
|
+
canCycleMode: context.canCycleBackgroundMode,
|
|
66941
|
+
canCycleValue: context.canCycleBackgroundValue,
|
|
66942
|
+
onCycleMode: (direction, event) => context.handleBackgroundCycle({
|
|
66943
|
+
kind: "cycle-mode",
|
|
66944
|
+
direction
|
|
66945
|
+
})(event),
|
|
66946
|
+
onCycleValue: (direction, event) => context.handleBackgroundCycle({
|
|
66947
|
+
kind: "cycle-value",
|
|
66948
|
+
direction
|
|
66949
|
+
})(event),
|
|
66950
|
+
onToggleChooser: (event) => {
|
|
66951
|
+
event.preventDefault();
|
|
66952
|
+
event.stopPropagation();
|
|
66953
|
+
context.onToggleBackgroundChooser();
|
|
66954
|
+
},
|
|
66955
|
+
chooser: /* @__PURE__ */ jsx(BackgroundChooser, {
|
|
66956
|
+
capability: context.backgroundCapability,
|
|
66957
|
+
current: context.currentBackground.override,
|
|
66958
|
+
imagePoolStatus: context.imagePoolStatus,
|
|
66959
|
+
onChoose: context.onChooseBackgroundOverride
|
|
66960
|
+
})
|
|
66961
|
+
}) }, "background");
|
|
66363
66962
|
case "facet": return /* @__PURE__ */ jsx(CustomizeCycleRow, {
|
|
66364
66963
|
label: row.control.label,
|
|
66365
66964
|
valueLabel: row.control.valueLabel,
|
|
@@ -67031,7 +67630,8 @@ function EditablePageRenderer(props) {
|
|
|
67031
67630
|
return [
|
|
67032
67631
|
snapshots.map((s) => `${s.id}:${s.version}`).join("|"),
|
|
67033
67632
|
linkedEntries.map((entry) => `${entry.meta.entryId}:${entry.version}`).join("|"),
|
|
67034
|
-
`overlay:${overlayRevision}
|
|
67633
|
+
`overlay:${overlayRevision}`,
|
|
67634
|
+
`generated-icons:${state.generatedIconAssets?.revision ?? 0}`
|
|
67035
67635
|
].join("|");
|
|
67036
67636
|
});
|
|
67037
67637
|
const linkedEntryOverlays = useMemo(() => {
|
|
@@ -67153,7 +67753,24 @@ function EditablePageRenderer(props) {
|
|
|
67153
67753
|
dataContext: linkedEntryDataContext,
|
|
67154
67754
|
apiClient: blockDataApiClient
|
|
67155
67755
|
});
|
|
67156
|
-
const
|
|
67756
|
+
const generatedIconAssetOverlay = useMemo(() => {
|
|
67757
|
+
const byBlock = {};
|
|
67758
|
+
for (const block of renderPage.blocks) {
|
|
67759
|
+
if (!block.id) continue;
|
|
67760
|
+
const assets = uiStore.getState().generatedIconAssets?.getForBlock(unsafeAsEditorBlockId(block.id)) ?? [];
|
|
67761
|
+
if (assets.length > 0) byBlock[block.id] = assets;
|
|
67762
|
+
}
|
|
67763
|
+
return byBlock;
|
|
67764
|
+
}, [
|
|
67765
|
+
renderPage.blocks,
|
|
67766
|
+
renderStateVersion,
|
|
67767
|
+
uiStore
|
|
67768
|
+
]);
|
|
67769
|
+
const dataContext = useMemo(() => mergeGeneratedIconAssetsIntoDataContext(mergeResolvedDataContext(linkedEntryDataContext, liveResolvedData), generatedIconAssetOverlay), [
|
|
67770
|
+
generatedIconAssetOverlay,
|
|
67771
|
+
linkedEntryDataContext,
|
|
67772
|
+
liveResolvedData
|
|
67773
|
+
]);
|
|
67157
67774
|
return /* @__PURE__ */ jsx(PageRenderer, {
|
|
67158
67775
|
...pageRendererProps,
|
|
67159
67776
|
page: renderPage,
|
|
@@ -67216,14 +67833,16 @@ function usePreviewBlockResolvedData(args) {
|
|
|
67216
67833
|
}
|
|
67217
67834
|
let cancelled = false;
|
|
67218
67835
|
const context = buildPreviewBlockDataContext(dataContext);
|
|
67219
|
-
|
|
67220
|
-
|
|
67836
|
+
const loaderClient = createPreviewBlockDataApiClient(apiClient, context);
|
|
67837
|
+
Promise.all([prefetchBlockData(page, context, {
|
|
67838
|
+
apiClient: loaderClient,
|
|
67221
67839
|
isValidEndpoint: isSupportedLoaderEndpoint,
|
|
67222
67840
|
onError: () => {}
|
|
67223
|
-
}).then((data) => {
|
|
67841
|
+
}), prefetchGeneratedIconAssets(page, dataContext.siteId, apiClient).catch(() => ({}))]).then(([data, generatedIconAssets]) => {
|
|
67842
|
+
const merged = mergeGeneratedIconAssets(data, generatedIconAssets);
|
|
67224
67843
|
if (!cancelled) setResolvedData({
|
|
67225
67844
|
key: cacheKey,
|
|
67226
|
-
data
|
|
67845
|
+
data: merged
|
|
67227
67846
|
});
|
|
67228
67847
|
}).catch(() => {});
|
|
67229
67848
|
return () => {
|
|
@@ -67237,6 +67856,25 @@ function usePreviewBlockResolvedData(args) {
|
|
|
67237
67856
|
]);
|
|
67238
67857
|
return resolvedData?.data ?? null;
|
|
67239
67858
|
}
|
|
67859
|
+
async function prefetchGeneratedIconAssets(page, siteId, apiClient) {
|
|
67860
|
+
const blockRefs = collectGeneratedIconAssetRefs(page);
|
|
67861
|
+
if (blockRefs.length === 0) return {};
|
|
67862
|
+
return mapGeneratedIconAssetsToBlocks(blockRefs, unwrapResponse(await apiClient({
|
|
67863
|
+
endpoint: "getGeneratedIconRenderAssets",
|
|
67864
|
+
params: { siteId },
|
|
67865
|
+
body: { refs: dedupeGeneratedIconAssetRefs(blockRefs) }
|
|
67866
|
+
})).assets);
|
|
67867
|
+
}
|
|
67868
|
+
function mergeGeneratedIconAssets(resolvedData, byBlock) {
|
|
67869
|
+
return mergeGeneratedIconAssetsIntoResolvedData(resolvedData, byBlock);
|
|
67870
|
+
}
|
|
67871
|
+
function mergeGeneratedIconAssetsIntoDataContext(dataContext, byBlock) {
|
|
67872
|
+
if (!dataContext || Object.keys(byBlock).length === 0) return dataContext;
|
|
67873
|
+
return {
|
|
67874
|
+
...dataContext,
|
|
67875
|
+
resolvedData: mergeGeneratedIconAssets(dataContext.resolvedData ?? {}, byBlock)
|
|
67876
|
+
};
|
|
67877
|
+
}
|
|
67240
67878
|
function buildPreviewBlockDataContext(dataContext) {
|
|
67241
67879
|
return {
|
|
67242
67880
|
siteId: dataContext.siteId,
|